Search in sources :

Example 21 with NULL

use of org.neo4j.io.pagecache.context.CursorContext.NULL in project neo4j by neo4j.

the class GBPTreeTest method writeHeaderInDirtyTreeMustNotDeadlock.

@Test
void writeHeaderInDirtyTreeMustNotDeadlock() throws IOException {
    try (PageCache pageCache = createPageCache(defaultPageSize * 4)) {
        makeDirty(pageCache);
        Consumer<PageCursor> headerWriter = pc -> pc.putBytes("failed".getBytes());
        try (GBPTree<MutableLong, MutableLong> index = index(pageCache).with(RecoveryCleanupWorkCollector.ignore()).build()) {
            index.checkpoint(headerWriter, NULL);
        }
        verifyHeader(pageCache, "failed".getBytes());
    }
}
Also used : BeforeEach(org.junit.jupiter.api.BeforeEach) SimpleLongLayout.longLayout(org.neo4j.index.internal.gbptree.SimpleLongLayout.longLayout) NoSuchFileException(java.nio.file.NoSuchFileException) Arrays(java.util.Arrays) PageCursor(org.neo4j.io.pagecache.PageCursor) DatabaseReadOnlyChecker.readOnly(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker.readOnly) RandomExtension(org.neo4j.test.extension.RandomExtension) CursorContext(org.neo4j.io.pagecache.context.CursorContext) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) TimeoutException(java.util.concurrent.TimeoutException) Config(org.neo4j.configuration.Config) PageSwapper(org.neo4j.io.pagecache.PageSwapper) DefaultPageCacheTracer(org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer) PF_SHARED_WRITE_LOCK(org.neo4j.io.pagecache.PagedFile.PF_SHARED_WRITE_LOCK) ByteBuffer(java.nio.ByteBuffer) PageCacheSupportExtension(org.neo4j.test.extension.pagecache.PageCacheSupportExtension) DefaultPageCursorTracer(org.neo4j.io.pagecache.tracing.cursor.DefaultPageCursorTracer) DEFAULT_DATABASE_NAME(org.neo4j.configuration.GraphDatabaseSettings.DEFAULT_DATABASE_NAME) Future(java.util.concurrent.Future) StoreChannel(org.neo4j.io.fs.StoreChannel) Pair(org.apache.commons.lang3.tuple.Pair) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) RandomRule(org.neo4j.test.rule.RandomRule) MutableLong(org.apache.commons.lang3.mutable.MutableLong) NULL(org.neo4j.io.pagecache.context.CursorContext.NULL) TestDirectoryExtension(org.neo4j.test.extension.testdirectory.TestDirectoryExtension) Path(java.nio.file.Path) PageCache(org.neo4j.io.pagecache.PageCache) ThrowingRunnable.throwing(org.neo4j.index.internal.gbptree.ThrowingRunnable.throwing) Monitor(org.neo4j.index.internal.gbptree.GBPTree.Monitor) StandardOpenOption(java.nio.file.StandardOpenOption) FileIsNotMappedException(org.neo4j.io.pagecache.impl.FileIsNotMappedException) Set(java.util.Set) TestDirectory(org.neo4j.test.rule.TestDirectory) Executors(java.util.concurrent.Executors) Test(org.junit.jupiter.api.Test) CountDownLatch(java.util.concurrent.CountDownLatch) List(java.util.List) INSTANCE(org.neo4j.memory.EmptyMemoryTracker.INSTANCE) PinEvent(org.neo4j.io.pagecache.tracing.PinEvent) Sets.immutable(org.eclipse.collections.impl.factory.Sets.immutable) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) Queue(java.util.Queue) MutableBoolean(org.apache.commons.lang3.mutable.MutableBoolean) DatabaseReadOnlyChecker(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker) GraphDatabaseSettings(org.neo4j.configuration.GraphDatabaseSettings) PagedFile(org.neo4j.io.pagecache.PagedFile) DELETE_ON_CLOSE(java.nio.file.StandardOpenOption.DELETE_ON_CLOSE) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Callable(java.util.concurrent.Callable) AtomicReference(java.util.concurrent.atomic.AtomicReference) NO_HEADER_READER(org.neo4j.index.internal.gbptree.GBPTree.NO_HEADER_READER) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) DelegatingPageCache(org.neo4j.io.pagecache.DelegatingPageCache) Inject(org.neo4j.test.extension.Inject) Assertions.assertThatThrownBy(org.assertj.core.api.Assertions.assertThatThrownBy) RegisterExtension(org.junit.jupiter.api.extension.RegisterExtension) BiConsumer(java.util.function.BiConsumer) ThrowingConsumer(org.neo4j.function.ThrowingConsumer) ByteBuffers(org.neo4j.io.memory.ByteBuffers) Math.toIntExact(java.lang.Math.toIntExact) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) LinkedList(java.util.LinkedList) ExecutorService(java.util.concurrent.ExecutorService) OutputStream(java.io.OutputStream) ByteUnit(org.neo4j.io.ByteUnit) Barrier(org.neo4j.test.Barrier) OpenOption(java.nio.file.OpenOption) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) TimeUnit(java.util.concurrent.TimeUnit) Consumer(java.util.function.Consumer) Assertions.assertArrayEquals(org.junit.jupiter.api.Assertions.assertArrayEquals) AfterEach(org.junit.jupiter.api.AfterEach) PageCacheConfig.config(org.neo4j.test.rule.PageCacheConfig.config) EphemeralFileSystemAbstraction(org.neo4j.io.fs.EphemeralFileSystemAbstraction) CREATE(java.nio.file.StandardOpenOption.CREATE) ImmutableSet(org.eclipse.collections.api.set.ImmutableSet) DelegatingPagedFile(org.neo4j.io.pagecache.DelegatingPagedFile) FileUtils.blockSize(org.neo4j.io.fs.FileUtils.blockSize) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) PageCacheConfig(org.neo4j.test.rule.PageCacheConfig) MutableLong(org.apache.commons.lang3.mutable.MutableLong) PageCache(org.neo4j.io.pagecache.PageCache) DelegatingPageCache(org.neo4j.io.pagecache.DelegatingPageCache) PageCursor(org.neo4j.io.pagecache.PageCursor) Test(org.junit.jupiter.api.Test)

Example 22 with NULL

use of org.neo4j.io.pagecache.context.CursorContext.NULL in project neo4j by neo4j.

the class GBPTreeTest method verifyHeader.

private void verifyHeader(PageCache pageCache, byte[] expectedHeader) throws IOException {
    // WHEN
    byte[] readHeader = new byte[expectedHeader.length];
    AtomicInteger length = new AtomicInteger();
    Header.Reader headerReader = headerData -> {
        length.set(headerData.limit());
        headerData.get(readHeader);
    };
    // Read as part of construction
    // open/close is enough to read header
    index(pageCache).with(headerReader).build().close();
    // THEN
    assertEquals(expectedHeader.length, length.get());
    assertArrayEquals(expectedHeader, readHeader);
    // WHEN
    // Read separate
    GBPTree.readHeader(pageCache, indexFile, headerReader, DEFAULT_DATABASE_NAME, NULL);
    assertEquals(expectedHeader.length, length.get());
    assertArrayEquals(expectedHeader, readHeader);
}
Also used : BeforeEach(org.junit.jupiter.api.BeforeEach) SimpleLongLayout.longLayout(org.neo4j.index.internal.gbptree.SimpleLongLayout.longLayout) NoSuchFileException(java.nio.file.NoSuchFileException) Arrays(java.util.Arrays) PageCursor(org.neo4j.io.pagecache.PageCursor) DatabaseReadOnlyChecker.readOnly(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker.readOnly) RandomExtension(org.neo4j.test.extension.RandomExtension) CursorContext(org.neo4j.io.pagecache.context.CursorContext) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) TimeoutException(java.util.concurrent.TimeoutException) Config(org.neo4j.configuration.Config) PageSwapper(org.neo4j.io.pagecache.PageSwapper) DefaultPageCacheTracer(org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer) PF_SHARED_WRITE_LOCK(org.neo4j.io.pagecache.PagedFile.PF_SHARED_WRITE_LOCK) ByteBuffer(java.nio.ByteBuffer) PageCacheSupportExtension(org.neo4j.test.extension.pagecache.PageCacheSupportExtension) DefaultPageCursorTracer(org.neo4j.io.pagecache.tracing.cursor.DefaultPageCursorTracer) DEFAULT_DATABASE_NAME(org.neo4j.configuration.GraphDatabaseSettings.DEFAULT_DATABASE_NAME) Future(java.util.concurrent.Future) StoreChannel(org.neo4j.io.fs.StoreChannel) Pair(org.apache.commons.lang3.tuple.Pair) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) RandomRule(org.neo4j.test.rule.RandomRule) MutableLong(org.apache.commons.lang3.mutable.MutableLong) NULL(org.neo4j.io.pagecache.context.CursorContext.NULL) TestDirectoryExtension(org.neo4j.test.extension.testdirectory.TestDirectoryExtension) Path(java.nio.file.Path) PageCache(org.neo4j.io.pagecache.PageCache) ThrowingRunnable.throwing(org.neo4j.index.internal.gbptree.ThrowingRunnable.throwing) Monitor(org.neo4j.index.internal.gbptree.GBPTree.Monitor) StandardOpenOption(java.nio.file.StandardOpenOption) FileIsNotMappedException(org.neo4j.io.pagecache.impl.FileIsNotMappedException) Set(java.util.Set) TestDirectory(org.neo4j.test.rule.TestDirectory) Executors(java.util.concurrent.Executors) Test(org.junit.jupiter.api.Test) CountDownLatch(java.util.concurrent.CountDownLatch) List(java.util.List) INSTANCE(org.neo4j.memory.EmptyMemoryTracker.INSTANCE) PinEvent(org.neo4j.io.pagecache.tracing.PinEvent) Sets.immutable(org.eclipse.collections.impl.factory.Sets.immutable) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) Queue(java.util.Queue) MutableBoolean(org.apache.commons.lang3.mutable.MutableBoolean) DatabaseReadOnlyChecker(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker) GraphDatabaseSettings(org.neo4j.configuration.GraphDatabaseSettings) PagedFile(org.neo4j.io.pagecache.PagedFile) DELETE_ON_CLOSE(java.nio.file.StandardOpenOption.DELETE_ON_CLOSE) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Callable(java.util.concurrent.Callable) AtomicReference(java.util.concurrent.atomic.AtomicReference) NO_HEADER_READER(org.neo4j.index.internal.gbptree.GBPTree.NO_HEADER_READER) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) DelegatingPageCache(org.neo4j.io.pagecache.DelegatingPageCache) Inject(org.neo4j.test.extension.Inject) Assertions.assertThatThrownBy(org.assertj.core.api.Assertions.assertThatThrownBy) RegisterExtension(org.junit.jupiter.api.extension.RegisterExtension) BiConsumer(java.util.function.BiConsumer) ThrowingConsumer(org.neo4j.function.ThrowingConsumer) ByteBuffers(org.neo4j.io.memory.ByteBuffers) Math.toIntExact(java.lang.Math.toIntExact) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) LinkedList(java.util.LinkedList) ExecutorService(java.util.concurrent.ExecutorService) OutputStream(java.io.OutputStream) ByteUnit(org.neo4j.io.ByteUnit) Barrier(org.neo4j.test.Barrier) OpenOption(java.nio.file.OpenOption) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) TimeUnit(java.util.concurrent.TimeUnit) Consumer(java.util.function.Consumer) Assertions.assertArrayEquals(org.junit.jupiter.api.Assertions.assertArrayEquals) AfterEach(org.junit.jupiter.api.AfterEach) PageCacheConfig.config(org.neo4j.test.rule.PageCacheConfig.config) EphemeralFileSystemAbstraction(org.neo4j.io.fs.EphemeralFileSystemAbstraction) CREATE(java.nio.file.StandardOpenOption.CREATE) ImmutableSet(org.eclipse.collections.api.set.ImmutableSet) DelegatingPagedFile(org.neo4j.io.pagecache.DelegatingPagedFile) FileUtils.blockSize(org.neo4j.io.fs.FileUtils.blockSize) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) PageCacheConfig(org.neo4j.test.rule.PageCacheConfig) AtomicInteger(java.util.concurrent.atomic.AtomicInteger)

Example 23 with NULL

use of org.neo4j.io.pagecache.context.CursorContext.NULL in project neo4j by neo4j.

the class GBPTreeTest method overwriteHeaderMustOnlyOverwriteHeaderNotState.

@Test
void overwriteHeaderMustOnlyOverwriteHeaderNotState() throws Exception {
    byte[] initialHeader = new byte[random.nextInt(100)];
    random.nextBytes(initialHeader);
    Consumer<PageCursor> headerWriter = pc -> pc.putBytes(initialHeader);
    try (PageCache pageCache = createPageCache(defaultPageSize)) {
        index(pageCache).with(headerWriter).build().close();
        Pair<TreeState, TreeState> treeStatesBeforeOverwrite = readTreeStates(pageCache);
        byte[] newHeader = new byte[random.nextInt(100)];
        random.nextBytes(newHeader);
        GBPTree.overwriteHeader(pageCache, indexFile, pc -> pc.putBytes(newHeader), DEFAULT_DATABASE_NAME, NULL);
        Pair<TreeState, TreeState> treeStatesAfterOverwrite = readTreeStates(pageCache);
        // TreeStates are the same
        assertEquals(treeStatesBeforeOverwrite.getLeft(), treeStatesAfterOverwrite.getLeft(), "expected tree state to exactly the same before and after overwriting header");
        assertEquals(treeStatesBeforeOverwrite.getRight(), treeStatesAfterOverwrite.getRight(), "expected tree state to exactly the same before and after overwriting header");
        // Verify header was actually overwritten. Do this after reading tree states because it will bump tree generation.
        verifyHeader(pageCache, newHeader);
    }
}
Also used : BeforeEach(org.junit.jupiter.api.BeforeEach) SimpleLongLayout.longLayout(org.neo4j.index.internal.gbptree.SimpleLongLayout.longLayout) NoSuchFileException(java.nio.file.NoSuchFileException) Arrays(java.util.Arrays) PageCursor(org.neo4j.io.pagecache.PageCursor) DatabaseReadOnlyChecker.readOnly(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker.readOnly) RandomExtension(org.neo4j.test.extension.RandomExtension) CursorContext(org.neo4j.io.pagecache.context.CursorContext) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) TimeoutException(java.util.concurrent.TimeoutException) Config(org.neo4j.configuration.Config) PageSwapper(org.neo4j.io.pagecache.PageSwapper) DefaultPageCacheTracer(org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer) PF_SHARED_WRITE_LOCK(org.neo4j.io.pagecache.PagedFile.PF_SHARED_WRITE_LOCK) ByteBuffer(java.nio.ByteBuffer) PageCacheSupportExtension(org.neo4j.test.extension.pagecache.PageCacheSupportExtension) DefaultPageCursorTracer(org.neo4j.io.pagecache.tracing.cursor.DefaultPageCursorTracer) DEFAULT_DATABASE_NAME(org.neo4j.configuration.GraphDatabaseSettings.DEFAULT_DATABASE_NAME) Future(java.util.concurrent.Future) StoreChannel(org.neo4j.io.fs.StoreChannel) Pair(org.apache.commons.lang3.tuple.Pair) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) RandomRule(org.neo4j.test.rule.RandomRule) MutableLong(org.apache.commons.lang3.mutable.MutableLong) NULL(org.neo4j.io.pagecache.context.CursorContext.NULL) TestDirectoryExtension(org.neo4j.test.extension.testdirectory.TestDirectoryExtension) Path(java.nio.file.Path) PageCache(org.neo4j.io.pagecache.PageCache) ThrowingRunnable.throwing(org.neo4j.index.internal.gbptree.ThrowingRunnable.throwing) Monitor(org.neo4j.index.internal.gbptree.GBPTree.Monitor) StandardOpenOption(java.nio.file.StandardOpenOption) FileIsNotMappedException(org.neo4j.io.pagecache.impl.FileIsNotMappedException) Set(java.util.Set) TestDirectory(org.neo4j.test.rule.TestDirectory) Executors(java.util.concurrent.Executors) Test(org.junit.jupiter.api.Test) CountDownLatch(java.util.concurrent.CountDownLatch) List(java.util.List) INSTANCE(org.neo4j.memory.EmptyMemoryTracker.INSTANCE) PinEvent(org.neo4j.io.pagecache.tracing.PinEvent) Sets.immutable(org.eclipse.collections.impl.factory.Sets.immutable) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) Queue(java.util.Queue) MutableBoolean(org.apache.commons.lang3.mutable.MutableBoolean) DatabaseReadOnlyChecker(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker) GraphDatabaseSettings(org.neo4j.configuration.GraphDatabaseSettings) PagedFile(org.neo4j.io.pagecache.PagedFile) DELETE_ON_CLOSE(java.nio.file.StandardOpenOption.DELETE_ON_CLOSE) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Callable(java.util.concurrent.Callable) AtomicReference(java.util.concurrent.atomic.AtomicReference) NO_HEADER_READER(org.neo4j.index.internal.gbptree.GBPTree.NO_HEADER_READER) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) DelegatingPageCache(org.neo4j.io.pagecache.DelegatingPageCache) Inject(org.neo4j.test.extension.Inject) Assertions.assertThatThrownBy(org.assertj.core.api.Assertions.assertThatThrownBy) RegisterExtension(org.junit.jupiter.api.extension.RegisterExtension) BiConsumer(java.util.function.BiConsumer) ThrowingConsumer(org.neo4j.function.ThrowingConsumer) ByteBuffers(org.neo4j.io.memory.ByteBuffers) Math.toIntExact(java.lang.Math.toIntExact) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) LinkedList(java.util.LinkedList) ExecutorService(java.util.concurrent.ExecutorService) OutputStream(java.io.OutputStream) ByteUnit(org.neo4j.io.ByteUnit) Barrier(org.neo4j.test.Barrier) OpenOption(java.nio.file.OpenOption) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) TimeUnit(java.util.concurrent.TimeUnit) Consumer(java.util.function.Consumer) Assertions.assertArrayEquals(org.junit.jupiter.api.Assertions.assertArrayEquals) AfterEach(org.junit.jupiter.api.AfterEach) PageCacheConfig.config(org.neo4j.test.rule.PageCacheConfig.config) EphemeralFileSystemAbstraction(org.neo4j.io.fs.EphemeralFileSystemAbstraction) CREATE(java.nio.file.StandardOpenOption.CREATE) ImmutableSet(org.eclipse.collections.api.set.ImmutableSet) DelegatingPagedFile(org.neo4j.io.pagecache.DelegatingPagedFile) FileUtils.blockSize(org.neo4j.io.fs.FileUtils.blockSize) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) PageCacheConfig(org.neo4j.test.rule.PageCacheConfig) PageCache(org.neo4j.io.pagecache.PageCache) DelegatingPageCache(org.neo4j.io.pagecache.DelegatingPageCache) PageCursor(org.neo4j.io.pagecache.PageCursor) Test(org.junit.jupiter.api.Test)

Example 24 with NULL

use of org.neo4j.io.pagecache.context.CursorContext.NULL in project neo4j by neo4j.

the class GraphStoreFixture method writableTokenHolders.

public TokenHolders writableTokenHolders() {
    TokenHolder propertyKeyTokens = new DelegatingTokenHolder(buildTokenCreator((name, internal, tx, next) -> {
        int id = next.propertyKey();
        tx.propertyKey(id, name, internal);
        return id;
    }), TokenHolder.TYPE_PROPERTY_KEY);
    TokenHolder labelTokens = new DelegatingTokenHolder(buildTokenCreator((name, internal, tx, next) -> {
        int id = next.label();
        tx.nodeLabel(id, name, internal);
        return id;
    }), TokenHolder.TYPE_LABEL);
    TokenHolder relationshipTypeTokens = new DelegatingTokenHolder(buildTokenCreator((name, internal, tx, next) -> {
        int id = next.relationshipType();
        tx.relationshipType(id, name, internal);
        return id;
    }), TokenHolder.TYPE_RELATIONSHIP_TYPE);
    TokenHolders tokenHolders = new TokenHolders(propertyKeyTokens, labelTokens, relationshipTypeTokens);
    tokenHolders.setInitialTokens(allReadableTokens(directStoreAccess().nativeStores()), NULL);
    return tokenHolders;
}
Also used : MutableInt(org.apache.commons.lang3.mutable.MutableInt) SchemaRule(org.neo4j.internal.schema.SchemaRule) TokenCreator(org.neo4j.token.TokenCreator) StoreTokens.allReadableTokens(org.neo4j.internal.recordstorage.StoreTokens.allReadableTokens) Preconditions(org.neo4j.util.Preconditions) ThrowingSupplier(org.neo4j.function.ThrowingSupplier) TransactionToApply(org.neo4j.kernel.impl.api.TransactionToApply) DatabaseLayout(org.neo4j.io.layout.DatabaseLayout) IndexStatisticsStore(org.neo4j.kernel.impl.api.index.stats.IndexStatisticsStore) NodeLabelsField(org.neo4j.kernel.impl.store.NodeLabelsField) StorageNodeCursor(org.neo4j.storageengine.api.StorageNodeCursor) DEFAULT_DATABASE_NAME(org.neo4j.configuration.GraphDatabaseSettings.DEFAULT_DATABASE_NAME) LookupAccessorsFromRunningDb(org.neo4j.consistency.LookupAccessorsFromRunningDb) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) IndexNotFoundKernelException(org.neo4j.internal.kernel.api.exceptions.schema.IndexNotFoundKernelException) Map(java.util.Map) AbstractBaseRecord(org.neo4j.kernel.impl.store.record.AbstractBaseRecord) NULL(org.neo4j.io.pagecache.context.CursorContext.NULL) PageCache(org.neo4j.io.pagecache.PageCache) RelationshipGroupDegreesStore(org.neo4j.internal.counts.RelationshipGroupDegreesStore) StorageEngine(org.neo4j.storageengine.api.StorageEngine) IndexProviderMap(org.neo4j.kernel.impl.api.index.IndexProviderMap) SchemaRecord(org.neo4j.kernel.impl.store.record.SchemaRecord) TestDirectory(org.neo4j.test.rule.TestDirectory) RecordStorageEngine(org.neo4j.internal.recordstorage.RecordStorageEngine) StandardCharsets(java.nio.charset.StandardCharsets) InternalTransactionCommitProcess(org.neo4j.kernel.impl.api.InternalTransactionCommitProcess) StoragePropertyCursor(org.neo4j.storageengine.api.StoragePropertyCursor) DirectStoreAccess(org.neo4j.consistency.store.DirectStoreAccess) GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) RecordStore(org.neo4j.kernel.impl.store.RecordStore) INSTANCE(org.neo4j.memory.EmptyMemoryTracker.INSTANCE) StoreType(org.neo4j.kernel.impl.store.StoreType) ANY_LABEL(org.neo4j.internal.kernel.api.TokenRead.ANY_LABEL) NodeStore(org.neo4j.kernel.impl.store.NodeStore) IndexDescriptor(org.neo4j.internal.schema.IndexDescriptor) DatabaseManagementService(org.neo4j.dbms.api.DatabaseManagementService) CountsStore(org.neo4j.counts.CountsStore) IndexingService(org.neo4j.kernel.impl.api.index.IndexingService) TransactionAppender(org.neo4j.kernel.impl.transaction.log.TransactionAppender) IdGeneratorFactory(org.neo4j.internal.id.IdGeneratorFactory) System.currentTimeMillis(java.lang.System.currentTimeMillis) GraphDatabaseSettings(org.neo4j.configuration.GraphDatabaseSettings) TokenHolder(org.neo4j.token.api.TokenHolder) TestDatabaseManagementServiceBuilder(org.neo4j.test.TestDatabaseManagementServiceBuilder) GraphDatabaseService(org.neo4j.graphdb.GraphDatabaseService) NeoStores(org.neo4j.kernel.impl.store.NeoStores) EntityUpdates(org.neo4j.storageengine.api.EntityUpdates) DelegatingTokenHolder(org.neo4j.token.DelegatingTokenHolder) StorageReader(org.neo4j.storageengine.api.StorageReader) TransactionApplicationMode(org.neo4j.storageengine.api.TransactionApplicationMode) GraphDatabaseInternalSettings(org.neo4j.configuration.GraphDatabaseInternalSettings) DependencyResolver(org.neo4j.common.DependencyResolver) Iterator(java.util.Iterator) TransactionRepresentation(org.neo4j.kernel.impl.transaction.TransactionRepresentation) PropertyRecord(org.neo4j.kernel.impl.store.record.PropertyRecord) Setting(org.neo4j.graphdb.config.Setting) IOException(java.io.IOException) IndexAccessors(org.neo4j.consistency.checking.index.IndexAccessors) PrefetchingIterator(org.neo4j.internal.helpers.collection.PrefetchingIterator) TokenStore(org.neo4j.kernel.impl.store.TokenStore) Neo4jLayout(org.neo4j.io.layout.Neo4jLayout) Consumer(java.util.function.Consumer) CountsAccessor(org.neo4j.counts.CountsAccessor) LongIterator(org.eclipse.collections.api.iterator.LongIterator) RelationshipGroupRecord(org.neo4j.kernel.impl.store.record.RelationshipGroupRecord) KernelException(org.neo4j.exceptions.KernelException) TokenHolders(org.neo4j.token.TokenHolders) NamedToken(org.neo4j.token.api.NamedToken) NodeRecord(org.neo4j.kernel.impl.store.record.NodeRecord) CommitEvent(org.neo4j.kernel.impl.transaction.tracing.CommitEvent) RelationshipRecord(org.neo4j.kernel.impl.store.record.RelationshipRecord) TransactionIdStore(org.neo4j.storageengine.api.TransactionIdStore) TokenHolder(org.neo4j.token.api.TokenHolder) DelegatingTokenHolder(org.neo4j.token.DelegatingTokenHolder) TokenHolders(org.neo4j.token.TokenHolders) DelegatingTokenHolder(org.neo4j.token.DelegatingTokenHolder)

Example 25 with NULL

use of org.neo4j.io.pagecache.context.CursorContext.NULL in project neo4j by neo4j.

the class AbstractLogTailScannerTest method logFile.

LogCreator logFile(Entry... entries) {
    return (logVersion, positions) -> {
        try {
            AtomicLong lastTxId = new AtomicLong();
            logVersionRepository.setCurrentLogVersion(logVersion, NULL);
            logVersionRepository.setCheckpointLogVersion(logVersion, NULL);
            LifeSupport logFileLife = new LifeSupport();
            logFileLife.start();
            logFileLife.add(logFiles);
            LogFile logFile = logFiles.getLogFile();
            var checkpointFile = logFiles.getCheckpointFile();
            int previousChecksum = BASE_TX_CHECKSUM;
            try {
                TransactionLogWriter logWriter = logFile.getTransactionLogWriter();
                LogEntryWriter writer = logWriter.getWriter();
                for (Entry entry : entries) {
                    LogPosition currentPosition = logWriter.getCurrentPosition();
                    positions.put(entry, currentPosition);
                    if (entry instanceof StartEntry) {
                        writer.writeStartEntry(0, 0, previousChecksum, new byte[0]);
                    } else if (entry instanceof CommitEntry) {
                        CommitEntry commitEntry = (CommitEntry) entry;
                        previousChecksum = writer.writeCommitEntry(commitEntry.txId, 0);
                        lastTxId.set(commitEntry.txId);
                    } else if (entry instanceof CheckPointEntry) {
                        CheckPointEntry checkPointEntry = (CheckPointEntry) entry;
                        Entry target = checkPointEntry.withPositionOfEntry;
                        LogPosition logPosition = target != null ? positions.get(target) : currentPosition;
                        assert logPosition != null : "No registered log position for " + target;
                        writeCheckpoint(writer, checkpointFile, logPosition);
                    } else if (entry instanceof PositionEntry) {
                    // Don't write anything, this entry is just for registering a position so that
                    // another CheckPointEntry can refer to it
                    } else {
                        throw new IllegalArgumentException("Unknown entry " + entry);
                    }
                }
            } finally {
                logFileLife.shutdown();
            }
        } catch (IOException e) {
            throw new UncheckedIOException(e);
        }
    };
}
Also used : BeforeEach(org.junit.jupiter.api.BeforeEach) LogFiles(org.neo4j.kernel.impl.transaction.log.files.LogFiles) LogAssertions.assertThat(org.neo4j.logging.LogAssertions.assertThat) HashMap(java.util.HashMap) LifeSupport(org.neo4j.kernel.lifecycle.LifeSupport) DatabaseLayout(org.neo4j.io.layout.DatabaseLayout) LogFile(org.neo4j.kernel.impl.transaction.log.files.LogFile) LogPosition(org.neo4j.kernel.impl.transaction.log.LogPosition) LogEntryWriter(org.neo4j.kernel.impl.transaction.log.entry.LogEntryWriter) Inject(org.neo4j.test.extension.Inject) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) AssertableLogProvider(org.neo4j.logging.AssertableLogProvider) Monitors(org.neo4j.monitoring.Monitors) BASE_TX_CHECKSUM(org.neo4j.storageengine.api.TransactionIdStore.BASE_TX_CHECKSUM) Map(java.util.Map) LogVersionRepository(org.neo4j.storageengine.api.LogVersionRepository) NULL(org.neo4j.io.pagecache.context.CursorContext.NULL) INFO(org.neo4j.logging.AssertableLogProvider.Level.INFO) StoreId(org.neo4j.storageengine.api.StoreId) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) Arguments.arguments(org.junit.jupiter.params.provider.Arguments.arguments) Path(java.nio.file.Path) MethodSource(org.junit.jupiter.params.provider.MethodSource) PageCache(org.neo4j.io.pagecache.PageCache) LogEntryReader(org.neo4j.kernel.impl.transaction.log.entry.LogEntryReader) IOException(java.io.IOException) LogEntryStart(org.neo4j.kernel.impl.transaction.log.entry.LogEntryStart) NO_TRANSACTION_ID(org.neo4j.kernel.impl.transaction.log.files.checkpoint.InlinedLogTailScanner.NO_TRANSACTION_ID) Arguments(org.junit.jupiter.params.provider.Arguments) SimpleLogVersionRepository(org.neo4j.kernel.impl.transaction.SimpleLogVersionRepository) EphemeralPageCacheExtension(org.neo4j.test.extension.pagecache.EphemeralPageCacheExtension) Test(org.junit.jupiter.api.Test) UncheckedIOException(java.io.UncheckedIOException) AtomicLong(java.util.concurrent.atomic.AtomicLong) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) EphemeralNeo4jLayoutExtension(org.neo4j.test.extension.EphemeralNeo4jLayoutExtension) INSTANCE(org.neo4j.memory.EmptyMemoryTracker.INSTANCE) Stream(java.util.stream.Stream) TestLogEntryReader.logEntryReader(org.neo4j.kernel.impl.transaction.log.TestLogEntryReader.logEntryReader) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) LogTailInformation(org.neo4j.kernel.impl.transaction.log.files.LogTailInformation) TransactionLogWriter(org.neo4j.kernel.impl.transaction.log.TransactionLogWriter) TransactionIdStore(org.neo4j.storageengine.api.TransactionIdStore) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) SimpleTransactionIdStore(org.neo4j.kernel.impl.transaction.SimpleTransactionIdStore) UncheckedIOException(java.io.UncheckedIOException) IOException(java.io.IOException) UncheckedIOException(java.io.UncheckedIOException) LogFile(org.neo4j.kernel.impl.transaction.log.files.LogFile) AtomicLong(java.util.concurrent.atomic.AtomicLong) LifeSupport(org.neo4j.kernel.lifecycle.LifeSupport) TransactionLogWriter(org.neo4j.kernel.impl.transaction.log.TransactionLogWriter) LogEntryWriter(org.neo4j.kernel.impl.transaction.log.entry.LogEntryWriter) LogPosition(org.neo4j.kernel.impl.transaction.log.LogPosition)

Aggregations

NULL (org.neo4j.io.pagecache.context.CursorContext.NULL)31 Test (org.junit.jupiter.api.Test)25 Assertions.assertEquals (org.junit.jupiter.api.Assertions.assertEquals)23 Assertions.assertTrue (org.junit.jupiter.api.Assertions.assertTrue)22 IOException (java.io.IOException)20 Inject (org.neo4j.test.extension.Inject)20 ArrayList (java.util.ArrayList)19 Assertions.assertFalse (org.junit.jupiter.api.Assertions.assertFalse)19 List (java.util.List)18 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)18 INSTANCE (org.neo4j.memory.EmptyMemoryTracker.INSTANCE)18 PageCache (org.neo4j.io.pagecache.PageCache)17 CursorContext (org.neo4j.io.pagecache.context.CursorContext)17 Assertions.assertThrows (org.junit.jupiter.api.Assertions.assertThrows)16 Path (java.nio.file.Path)15 DefaultPageCacheTracer (org.neo4j.io.pagecache.tracing.DefaultPageCacheTracer)15 RandomRule (org.neo4j.test.rule.RandomRule)15 BeforeEach (org.junit.jupiter.api.BeforeEach)14 Config (org.neo4j.configuration.Config)14 PageCacheTracer (org.neo4j.io.pagecache.tracing.PageCacheTracer)14