Search in sources :

Example 26 with NULL

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

the class NodeStoreTest method scanningRecordsShouldVisitEachInUseRecordOnce.

@Test
void scanningRecordsShouldVisitEachInUseRecordOnce() throws IOException {
    // GIVEN we have a NodeStore with data that spans several pages...
    nodeStore = newNodeStore(fs);
    ThreadLocalRandom rng = ThreadLocalRandom.current();
    final MutableLongSet nextRelSet = new LongHashSet();
    for (int i = 0; i < 10_000; i++) {
        // Enough records to span several pages
        int nextRelCandidate = rng.nextInt(0, Integer.MAX_VALUE);
        if (nextRelSet.add(nextRelCandidate)) {
            long nodeId = nodeStore.nextId(NULL);
            NodeRecord record = new NodeRecord(nodeId).initialize(true, 20, false, nextRelCandidate, 0);
            nodeStore.updateRecord(record, NULL);
            if (rng.nextInt(0, 10) < 3) {
                nextRelSet.remove(nextRelCandidate);
                record.setInUse(false);
                nodeStore.updateRecord(record, NULL);
            }
        }
    }
    // ...WHEN we now have an interesting set of node records, and we
    // visit each and remove that node from our nextRelSet...
    Visitor<NodeRecord, IOException> scanner = record -> {
        // ...THEN we should observe that no nextRel is ever removed twice...
        assertTrue(nextRelSet.remove(record.getNextRel()));
        return false;
    };
    nodeStore.scanAllRecords(scanner, NULL);
    // ...NOR do we have anything left in the set afterwards.
    assertTrue(nextRelSet.isEmpty());
}
Also used : Visitor(org.neo4j.internal.helpers.collection.Visitor) IndexedIdGenerator(org.neo4j.internal.id.indexed.IndexedIdGenerator) LongSupplier(java.util.function.LongSupplier) CursorContext(org.neo4j.io.pagecache.context.CursorContext) ArgumentMatchers.eq(org.mockito.ArgumentMatchers.eq) NORMAL(org.neo4j.kernel.impl.store.record.RecordLoad.NORMAL) Config(org.neo4j.configuration.Config) NO_NEXT_RELATIONSHIP(org.neo4j.kernel.impl.store.record.Record.NO_NEXT_RELATIONSHIP) NullLogProvider(org.neo4j.logging.NullLogProvider) DatabaseLayout(org.neo4j.io.layout.DatabaseLayout) PageCacheSupportExtension(org.neo4j.test.extension.pagecache.PageCacheSupportExtension) NO_LABELS_FIELD(org.neo4j.kernel.impl.store.record.Record.NO_LABELS_FIELD) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) LongHashSet(org.eclipse.collections.impl.set.mutable.primitive.LongHashSet) Arrays.asList(java.util.Arrays.asList) PageCacheTracer(org.neo4j.io.pagecache.tracing.PageCacheTracer) NULL(org.neo4j.io.pagecache.context.CursorContext.NULL) RecoveryCleanupWorkCollector(org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector) Path(java.nio.file.Path) PageCache(org.neo4j.io.pagecache.PageCache) DatabaseReadOnlyChecker.writable(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker.writable) IOController(org.neo4j.io.pagecache.IOController) DynamicRecord(org.neo4j.kernel.impl.store.record.DynamicRecord) Test(org.junit.jupiter.api.Test) IdType(org.neo4j.internal.id.IdType) EphemeralNeo4jLayoutExtension(org.neo4j.test.extension.EphemeralNeo4jLayoutExtension) INSTANCE(org.neo4j.memory.EmptyMemoryTracker.INSTANCE) DefaultIdGeneratorFactory(org.neo4j.internal.id.DefaultIdGeneratorFactory) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) MutableBoolean(org.apache.commons.lang3.mutable.MutableBoolean) DatabaseReadOnlyChecker(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker) Mockito.mock(org.mockito.Mockito.mock) Assertions.assertThrows(org.junit.jupiter.api.Assertions.assertThrows) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) ExceptionUtils.indexOfThrowable(org.apache.commons.lang3.exception.ExceptionUtils.indexOfThrowable) IdGeneratorFactory(org.neo4j.internal.id.IdGeneratorFactory) PagedFile(org.neo4j.io.pagecache.PagedFile) Mockito.spy(org.mockito.Mockito.spy) ArrayList(java.util.ArrayList) DelegatingPageCache(org.neo4j.io.pagecache.DelegatingPageCache) StringContains.containsString(org.hamcrest.core.StringContains.containsString) Inject(org.neo4j.test.extension.Inject) RegisterExtension(org.junit.jupiter.api.extension.RegisterExtension) ThreadLocalRandom(java.util.concurrent.ThreadLocalRandom) NO_NEXT_PROPERTY(org.neo4j.kernel.impl.store.record.Record.NO_NEXT_PROPERTY) MatcherAssert.assertThat(org.hamcrest.MatcherAssert.assertThat) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) DynamicArrayStore.allocateFromNumbers(org.neo4j.kernel.impl.store.DynamicArrayStore.allocateFromNumbers) NodeStore.readOwnerFromDynamicLabelsRecord(org.neo4j.kernel.impl.store.NodeStore.readOwnerFromDynamicLabelsRecord) ReusableRecordsAllocator(org.neo4j.kernel.impl.store.allocator.ReusableRecordsAllocator) OpenOption(java.nio.file.OpenOption) NULL_REFERENCE(org.neo4j.kernel.impl.store.record.Record.NULL_REFERENCE) IOException(java.io.IOException) Mockito.verify(org.mockito.Mockito.verify) MutableLongSet(org.eclipse.collections.api.set.primitive.MutableLongSet) RecoveryCleanupWorkCollector.immediate(org.neo4j.index.internal.gbptree.RecoveryCleanupWorkCollector.immediate) AfterEach(org.junit.jupiter.api.AfterEach) Mockito.never(org.mockito.Mockito.never) EphemeralFileSystemAbstraction(org.neo4j.io.fs.EphemeralFileSystemAbstraction) NodeRecord(org.neo4j.kernel.impl.store.record.NodeRecord) ImmutableSet(org.eclipse.collections.api.set.ImmutableSet) Collections(java.util.Collections) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) LongHashSet(org.eclipse.collections.impl.set.mutable.primitive.LongHashSet) NodeRecord(org.neo4j.kernel.impl.store.record.NodeRecord) MutableLongSet(org.eclipse.collections.api.set.primitive.MutableLongSet) ThreadLocalRandom(java.util.concurrent.ThreadLocalRandom) IOException(java.io.IOException) Test(org.junit.jupiter.api.Test)

Example 27 with NULL

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

the class DatabaseStartupTest method startTheDatabaseWithWrongVersionShouldFailWithUpgradeNotAllowed.

@Test
void startTheDatabaseWithWrongVersionShouldFailWithUpgradeNotAllowed() throws Throwable {
    // given
    // create a store
    DatabaseManagementService managementService = new TestDatabaseManagementServiceBuilder(databaseLayout).build();
    GraphDatabaseAPI db = (GraphDatabaseAPI) managementService.database(DEFAULT_DATABASE_NAME);
    try (Transaction tx = db.beginTx()) {
        tx.createNode();
        tx.commit();
    }
    managementService.shutdown();
    // mess up the version in the metadatastore
    try (FileSystemAbstraction fileSystem = new DefaultFileSystemAbstraction();
        ThreadPoolJobScheduler scheduler = new ThreadPoolJobScheduler();
        PageCache pageCache = createPageCache(fileSystem, scheduler, PageCacheTracer.NULL)) {
        MetaDataStore.setRecord(pageCache, databaseLayout.metadataStore(), MetaDataStore.Position.STORE_VERSION, MetaDataStore.versionStringToLong("bad"), databaseLayout.getDatabaseName(), NULL);
    }
    managementService = new TestDatabaseManagementServiceBuilder(databaseLayout).build();
    GraphDatabaseAPI databaseService = (GraphDatabaseAPI) managementService.database(DEFAULT_DATABASE_NAME);
    try {
        assertThrows(DatabaseShutdownException.class, databaseService::beginTx);
        DatabaseStateService dbStateService = databaseService.getDependencyResolver().resolveDependency(DatabaseStateService.class);
        assertTrue(dbStateService.causeOfFailure(databaseService.databaseId()).isPresent());
        Throwable throwable = findCauseOrSuppressed(dbStateService.causeOfFailure(databaseService.databaseId()).get(), e -> e instanceof IllegalArgumentException).get();
        assertEquals("Unknown store version 'bad'", throwable.getMessage());
    } finally {
        managementService.shutdown();
    }
}
Also used : Assertions.assertThrows(org.junit.jupiter.api.Assertions.assertThrows) GraphDatabaseSettings(org.neo4j.configuration.GraphDatabaseSettings) LogAssertions.assertThat(org.neo4j.logging.LogAssertions.assertThat) StandalonePageCacheFactory.createPageCache(org.neo4j.io.pagecache.impl.muninn.StandalonePageCacheFactory.createPageCache) Config(org.neo4j.configuration.Config) DatabaseLayout(org.neo4j.io.layout.DatabaseLayout) DEFAULT_DATABASE_NAME(org.neo4j.configuration.GraphDatabaseSettings.DEFAULT_DATABASE_NAME) TestDatabaseManagementServiceBuilder(org.neo4j.test.TestDatabaseManagementServiceBuilder) GraphDatabaseService(org.neo4j.graphdb.GraphDatabaseService) Inject(org.neo4j.test.extension.Inject) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) AssertableLogProvider(org.neo4j.logging.AssertableLogProvider) PageCacheTracer(org.neo4j.io.pagecache.tracing.PageCacheTracer) NULL(org.neo4j.io.pagecache.context.CursorContext.NULL) GraphDatabaseInternalSettings(org.neo4j.configuration.GraphDatabaseInternalSettings) DbmsInfo(org.neo4j.kernel.impl.factory.DbmsInfo) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) Transaction(org.neo4j.graphdb.Transaction) Path(java.nio.file.Path) PageCache(org.neo4j.io.pagecache.PageCache) Exceptions.findCauseOrSuppressed(org.neo4j.internal.helpers.Exceptions.findCauseOrSuppressed) DatabaseManagementServiceBuilder(org.neo4j.dbms.api.DatabaseManagementServiceBuilder) IOException(java.io.IOException) Neo4jLayoutExtension(org.neo4j.test.extension.Neo4jLayoutExtension) GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) Test(org.junit.jupiter.api.Test) DatabaseStateService(org.neo4j.dbms.DatabaseStateService) ExternalDependencies(org.neo4j.graphdb.facade.ExternalDependencies) DefaultFileSystemAbstraction(org.neo4j.io.fs.DefaultFileSystemAbstraction) EphemeralFileSystemAbstraction(org.neo4j.io.fs.EphemeralFileSystemAbstraction) MetaDataStore(org.neo4j.kernel.impl.store.MetaDataStore) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) Optional(java.util.Optional) CommunityEditionModule(org.neo4j.graphdb.factory.module.edition.CommunityEditionModule) ThreadPoolJobScheduler(org.neo4j.test.scheduler.ThreadPoolJobScheduler) DatabaseShutdownException(org.neo4j.graphdb.DatabaseShutdownException) DatabaseManagementService(org.neo4j.dbms.api.DatabaseManagementService) DatabaseManagementServiceFactory(org.neo4j.graphdb.facade.DatabaseManagementServiceFactory) StoreUpgrader(org.neo4j.kernel.impl.storemigration.StoreUpgrader) GlobalModule(org.neo4j.graphdb.factory.module.GlobalModule) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) DefaultFileSystemAbstraction(org.neo4j.io.fs.DefaultFileSystemAbstraction) EphemeralFileSystemAbstraction(org.neo4j.io.fs.EphemeralFileSystemAbstraction) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) DefaultFileSystemAbstraction(org.neo4j.io.fs.DefaultFileSystemAbstraction) DatabaseStateService(org.neo4j.dbms.DatabaseStateService) TestDatabaseManagementServiceBuilder(org.neo4j.test.TestDatabaseManagementServiceBuilder) GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) Transaction(org.neo4j.graphdb.Transaction) ThreadPoolJobScheduler(org.neo4j.test.scheduler.ThreadPoolJobScheduler) DatabaseManagementService(org.neo4j.dbms.api.DatabaseManagementService) StandalonePageCacheFactory.createPageCache(org.neo4j.io.pagecache.impl.muninn.StandalonePageCacheFactory.createPageCache) PageCache(org.neo4j.io.pagecache.PageCache) Test(org.junit.jupiter.api.Test)

Example 28 with NULL

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

the class CsvInputBatchImportIT method buildUpExpectedData.

private static void buildUpExpectedData(List<InputEntity> nodeData, List<InputEntity> relationshipData, Map<String, InputEntity> expectedNodes, Map<String, String[]> expectedNodeNames, Map<String, Map<String, Consumer<Object>>> expectedNodePropertyVerifiers, Map<String, Map<String, Map<String, AtomicInteger>>> expectedRelationships, Map<String, AtomicLong> nodeCounts, Map<String, Map<String, Map<String, AtomicLong>>> relationshipCounts) {
    for (InputEntity node : nodeData) {
        expectedNodes.put((String) node.id(), node);
        expectedNodeNames.put(nameOf(node), node.labels());
        // Build default verifiers for all the properties that compares the property value using equals
        Assertions.assertFalse(node.hasIntPropertyKeyIds);
        Map<String, Consumer<Object>> propertyVerifiers = new TreeMap<>();
        for (int i = 0; i < node.propertyCount(); i++) {
            final Object expectedValue = node.propertyValue(i);
            Consumer verify;
            if (expectedValue instanceof TemporalAmount) {
                // Since there is no straightforward comparison for TemporalAmount we add it to a reference
                // point in time and compare the result
                verify = actualValue -> {
                    LocalDateTime referenceTemporal = LocalDateTime.of(0, 1, 1, 0, 0);
                    LocalDateTime expected = referenceTemporal.plus((TemporalAmount) expectedValue);
                    LocalDateTime actual = referenceTemporal.plus((TemporalAmount) actualValue);
                    assertEquals(expected, actual);
                };
            } else if (expectedValue instanceof Temporal) {
                final LocalDate expectedDate = ((Temporal) expectedValue).query(TemporalQueries.localDate());
                final LocalTime expectedTime = ((Temporal) expectedValue).query(TemporalQueries.localTime());
                final ZoneId expectedZoneId = ((Temporal) expectedValue).query(TemporalQueries.zone());
                verify = actualValue -> {
                    LocalDate actualDate = ((Temporal) actualValue).query(TemporalQueries.localDate());
                    LocalTime actualTime = ((Temporal) actualValue).query(TemporalQueries.localTime());
                    ZoneId actualZoneId = ((Temporal) actualValue).query(TemporalQueries.zone());
                    assertEquals(expectedDate, actualDate);
                    assertEquals(expectedTime, actualTime);
                    if (expectedZoneId == null) {
                        if (actualZoneId != null) {
                            // If the actual value is zoned it should have the default zone
                            assertEquals(testDefaultTimeZone.get(), actualZoneId);
                        }
                    } else {
                        assertEquals(expectedZoneId, actualZoneId);
                    }
                };
            } else if (expectedValue instanceof float[]) {
                verify = actualValue -> assertArrayEquals((float[]) expectedValue, (float[]) actualValue);
            } else if (expectedValue.getClass().isArray()) {
                verify = actualValue -> assertArrayEquals((Object[]) expectedValue, (Object[]) actualValue);
            } else {
                verify = actualValue -> assertEquals(expectedValue, actualValue);
            }
            propertyVerifiers.put((String) node.propertyKey(i), verify);
        }
        // Special verifier for pointA property
        Consumer verifyPointA = actualValue -> {
            // The y-coordinate should match the node number modulo 90 (so we don't break wgs boundaries)
            PointValue v = (PointValue) actualValue;
            double actualY = v.getCoordinates().get(0).getCoordinate().get(1);
            double expectedY = indexOf(node) % 90;
            String message = actualValue + " does not have y=" + expectedY;
            assertEquals(expectedY, actualY, 0.1, message);
            message = actualValue + " does not have crs=wgs-84";
            assertEquals(CoordinateReferenceSystem.WGS84.getName(), v.getCoordinateReferenceSystem().getName(), message);
        };
        propertyVerifiers.put("pointA", verifyPointA);
        // Special verifier for pointB property
        Consumer verifyPointB = actualValue -> {
            // The y-coordinate should match the node number
            PointValue v = (PointValue) actualValue;
            double actualY = v.getCoordinates().get(0).getCoordinate().get(1);
            double expectedY = indexOf(node);
            String message = actualValue + " does not have y=" + expectedY;
            assertEquals(expectedY, actualY, 0.1, message);
            message = actualValue + " does not have crs=cartesian";
            assertEquals(CoordinateReferenceSystem.Cartesian.getName(), v.getCoordinateReferenceSystem().getName(), message);
        };
        propertyVerifiers.put("pointB", verifyPointB);
        // Special verifier for pointArray property
        Consumer verifyPointArray = actualValue -> verifyPointB.accept(((PointValue[]) actualValue)[0]);
        propertyVerifiers.put("pointArray", verifyPointArray);
        expectedNodePropertyVerifiers.put(nameOf(node), propertyVerifiers);
        countNodeLabels(nodeCounts, node.labels());
    }
    for (InputEntity relationship : relationshipData) {
        // Expected relationship counts per node, type and direction
        InputEntity startNode = expectedNodes.get(relationship.startId());
        InputEntity endNode = expectedNodes.get(relationship.endId());
        {
            expectedRelationships.get(nameOf(startNode)).get(nameOf(endNode)).get(relationship.stringType).incrementAndGet();
        }
        // Expected counts per start/end node label ids
        // Let's do what CountsState#addRelationship does, roughly
        relationshipCounts.get(null).get(null).get(null).incrementAndGet();
        relationshipCounts.get(null).get(relationship.stringType).get(null).incrementAndGet();
        for (String startNodeLabelName : asSet(startNode.labels())) {
            Map<String, Map<String, AtomicLong>> startLabelCounts = relationshipCounts.get(startNodeLabelName);
            startLabelCounts.get(null).get(null).incrementAndGet();
            Map<String, AtomicLong> typeCounts = startLabelCounts.get(relationship.stringType);
            typeCounts.get(null).incrementAndGet();
            if (COMPUTE_DOUBLE_SIDED_RELATIONSHIP_COUNTS) {
                for (String endNodeLabelName : asSet(endNode.labels())) {
                    startLabelCounts.get(null).get(endNodeLabelName).incrementAndGet();
                    typeCounts.get(endNodeLabelName).incrementAndGet();
                }
            }
        }
        for (String endNodeLabelName : asSet(endNode.labels())) {
            relationshipCounts.get(null).get(null).get(endNodeLabelName).incrementAndGet();
            relationshipCounts.get(null).get(relationship.stringType).get(endNodeLabelName).incrementAndGet();
        }
    }
}
Also used : LocalDateTime(java.time.LocalDateTime) Charset.defaultCharset(java.nio.charset.Charset.defaultCharset) NullLogService(org.neo4j.logging.internal.NullLogService) RandomExtension(org.neo4j.test.extension.RandomExtension) Collector(org.neo4j.internal.batchimport.input.Collector) ZonedDateTime(java.time.ZonedDateTime) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) RecordFormatSelector.defaultFormat(org.neo4j.kernel.impl.store.format.RecordFormatSelector.defaultFormat) Random(java.util.Random) Config(org.neo4j.configuration.Config) TemporalQueries(java.time.temporal.TemporalQueries) StringUtils(org.apache.commons.lang3.StringUtils) DatabaseLayout(org.neo4j.io.layout.DatabaseLayout) DEFAULT_DATABASE_NAME(org.neo4j.configuration.GraphDatabaseSettings.DEFAULT_DATABASE_NAME) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) RandomRule(org.neo4j.test.rule.RandomRule) TransactionLogInitializer(org.neo4j.kernel.impl.transaction.log.files.TransactionLogInitializer) Map(java.util.Map) LocalTime(java.time.LocalTime) PageCacheTracer(org.neo4j.io.pagecache.tracing.PageCacheTracer) NULL(org.neo4j.io.pagecache.context.CursorContext.NULL) AutoCreatingHashMap.nested(org.neo4j.kernel.impl.util.AutoCreatingHashMap.nested) ZoneOffset(java.time.ZoneOffset) ImportLogic(org.neo4j.internal.batchimport.ImportLogic) Transaction(org.neo4j.graphdb.Transaction) Path(java.nio.file.Path) Input(org.neo4j.internal.batchimport.input.Input) OffsetTime(java.time.OffsetTime) AutoCreatingHashMap.values(org.neo4j.kernel.impl.util.AutoCreatingHashMap.values) Collection(java.util.Collection) Set(java.util.Set) TestDirectory(org.neo4j.test.rule.TestDirectory) GraphDatabaseSettings.db_timezone(org.neo4j.configuration.GraphDatabaseSettings.db_timezone) UUID(java.util.UUID) ExecutionMonitor(org.neo4j.internal.batchimport.staging.ExecutionMonitor) RecordStorageEngine(org.neo4j.internal.recordstorage.RecordStorageEngine) PointValue(org.neo4j.values.storable.PointValue) StandardCharsets(java.nio.charset.StandardCharsets) ZoneId(java.time.ZoneId) Neo4jLayoutExtension(org.neo4j.test.extension.Neo4jLayoutExtension) String.format(java.lang.String.format) GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) Test(org.junit.jupiter.api.Test) IdType(org.neo4j.internal.batchimport.input.IdType) List(java.util.List) INSTANCE(org.neo4j.memory.EmptyMemoryTracker.INSTANCE) LocalDate(java.time.LocalDate) Writer(java.io.Writer) ANY_LABEL(org.neo4j.internal.kernel.api.TokenRead.ANY_LABEL) Temporal(java.time.temporal.Temporal) DatabaseManagementService(org.neo4j.dbms.api.DatabaseManagementService) EMPTY(org.neo4j.internal.batchimport.AdditionalInitialIds.EMPTY) Label(org.neo4j.graphdb.Label) LocalDateTime(java.time.LocalDateTime) HashMap(java.util.HashMap) Function(java.util.function.Function) Supplier(java.util.function.Supplier) Node(org.neo4j.graphdb.Node) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Configuration(org.neo4j.csv.reader.Configuration) TestDatabaseManagementServiceBuilder(org.neo4j.test.TestDatabaseManagementServiceBuilder) GraphDatabaseService(org.neo4j.graphdb.GraphDatabaseService) NeoStores(org.neo4j.kernel.impl.store.NeoStores) Inject(org.neo4j.test.extension.Inject) TemporalAmount(java.time.temporal.TemporalAmount) GraphDatabaseSettings.dense_node_threshold(org.neo4j.configuration.GraphDatabaseSettings.dense_node_threshold) BatchImporter(org.neo4j.internal.batchimport.BatchImporter) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) JobScheduler(org.neo4j.scheduler.JobScheduler) ANY_RELATIONSHIP_TYPE(org.neo4j.internal.kernel.api.TokenRead.ANY_RELATIONSHIP_TYPE) Period(java.time.Period) COMMAS(org.neo4j.csv.reader.Configuration.COMMAS) InputEntityDecorators(org.neo4j.internal.batchimport.input.InputEntityDecorators) ParallelBatchImporter(org.neo4j.internal.batchimport.ParallelBatchImporter) LogTimeZone(org.neo4j.logging.LogTimeZone) IndexImporterFactoryImpl(org.neo4j.kernel.impl.index.schema.IndexImporterFactoryImpl) InputEntity(org.neo4j.internal.batchimport.input.InputEntity) IOException(java.io.IOException) TokenStore(org.neo4j.kernel.impl.store.TokenStore) Consumer(java.util.function.Consumer) CountsAccessor(org.neo4j.counts.CountsAccessor) Assertions.assertArrayEquals(org.junit.jupiter.api.Assertions.assertArrayEquals) AtomicLong(java.util.concurrent.atomic.AtomicLong) Relationship(org.neo4j.graphdb.Relationship) TreeMap(java.util.TreeMap) CoordinateReferenceSystem(org.neo4j.values.storable.CoordinateReferenceSystem) Iterators.asSet(org.neo4j.internal.helpers.collection.Iterators.asSet) Group(org.neo4j.internal.batchimport.input.Group) AutoCreatingHashMap(org.neo4j.kernel.impl.util.AutoCreatingHashMap) NamedToken(org.neo4j.token.api.NamedToken) Assertions(org.junit.jupiter.api.Assertions) ThreadPoolJobScheduler(org.neo4j.test.scheduler.ThreadPoolJobScheduler) Pair(org.neo4j.internal.helpers.collection.Pair) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) LocalTime(java.time.LocalTime) ZoneId(java.time.ZoneId) PointValue(org.neo4j.values.storable.PointValue) TreeMap(java.util.TreeMap) LocalDate(java.time.LocalDate) AtomicLong(java.util.concurrent.atomic.AtomicLong) Consumer(java.util.function.Consumer) Temporal(java.time.temporal.Temporal) TemporalAmount(java.time.temporal.TemporalAmount) InputEntity(org.neo4j.internal.batchimport.input.InputEntity) Map(java.util.Map) HashMap(java.util.HashMap) TreeMap(java.util.TreeMap) AutoCreatingHashMap(org.neo4j.kernel.impl.util.AutoCreatingHashMap)

Example 29 with NULL

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

the class SeekCursorTestBase method shouldCatchupRootWhenNodeHasTooNewGenerationWhileTraversingLeaves.

@Test
void shouldCatchupRootWhenNodeHasTooNewGenerationWhileTraversingLeaves() throws Exception {
    // given
    MutableBoolean triggered = new MutableBoolean(false);
    // We don't care
    long oldRightChild = 666;
    // a newer right leaf
    long rightChild = cursor.getCurrentPageId();
    node.initializeLeaf(cursor, stableGeneration, unstableGeneration);
    cursor.next();
    RootCatchup rootCatchup = fromId -> {
        // Use right child as new start over root to terminate test
        cursor.next(rightChild);
        triggered.setTrue();
        return new Root(cursor.getCurrentPageId(), TreeNode.generation(cursor));
    };
    // a left leaf
    long leftChild = cursor.getCurrentPageId();
    node.initializeLeaf(cursor, stableGeneration - 1, unstableGeneration - 1);
    // with an old pointer to right sibling
    TreeNode.setRightSibling(cursor, rightChild, stableGeneration - 1, unstableGeneration - 1);
    cursor.next();
    // a root
    node.initializeInternal(cursor, stableGeneration - 1, unstableGeneration - 1);
    long keyInRoot = 10L;
    node.insertKeyAndRightChildAt(cursor, key(keyInRoot), oldRightChild, 0, 0, stableGeneration, unstableGeneration, NULL);
    TreeNode.setKeyCount(cursor, 1);
    // with old pointer to child (simulating reuse of internal node)
    node.setChildAt(cursor, leftChild, 0, stableGeneration, unstableGeneration);
    // when
    KEY from = key(1L);
    KEY to = key(20L);
    try (SeekCursor<KEY, VALUE> seek = new SeekCursor<>(cursor, node, from, to, layout, stableGeneration - 1, unstableGeneration - 1, generationSupplier, rootCatchup, unstableGeneration, exceptionDecorator, 1, LEAF_LEVEL, SeekCursor.NO_MONITOR, NULL)) {
        while (seek.next()) {
            seek.key();
        }
    }
    // then
    assertTrue(triggered.getValue());
}
Also used : Assertions.assertThrows(org.junit.jupiter.api.Assertions.assertThrows) BeforeEach(org.junit.jupiter.api.BeforeEach) Arrays(java.util.Arrays) PageCursor(org.neo4j.io.pagecache.PageCursor) LongSupplier(java.util.function.LongSupplier) RandomExtension(org.neo4j.test.extension.RandomExtension) SHARED_RESOURCE(org.neo4j.test.extension.ExecutionSharedContext.SHARED_RESOURCE) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) GenerationSafePointerPair.pointer(org.neo4j.index.internal.gbptree.GenerationSafePointerPair.pointer) ArrayList(java.util.ArrayList) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) Inject(org.neo4j.test.extension.Inject) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) RandomRule(org.neo4j.test.rule.RandomRule) LEAF(org.neo4j.index.internal.gbptree.TreeNode.Type.LEAF) NULL(org.neo4j.io.pagecache.context.CursorContext.NULL) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) DEFAULT_MAX_READ_AHEAD(org.neo4j.index.internal.gbptree.SeekCursor.DEFAULT_MAX_READ_AHEAD) IOException(java.io.IOException) LEAF_LEVEL(org.neo4j.index.internal.gbptree.SeekCursor.LEAF_LEVEL) ResourceLock(org.junit.jupiter.api.parallel.ResourceLock) String.format(java.lang.String.format) Test(org.junit.jupiter.api.Test) Consumer(java.util.function.Consumer) List(java.util.List) INTERNAL(org.neo4j.index.internal.gbptree.TreeNode.Type.INTERNAL) ValueMergers.overwrite(org.neo4j.index.internal.gbptree.ValueMergers.overwrite) DelegatingPageCursor(org.neo4j.io.pagecache.impl.DelegatingPageCursor) NO_MONITOR(org.neo4j.index.internal.gbptree.GBPTree.NO_MONITOR) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) MutableBoolean(org.apache.commons.lang3.mutable.MutableBoolean) Collections(java.util.Collections) MutableBoolean(org.apache.commons.lang3.mutable.MutableBoolean) Test(org.junit.jupiter.api.Test)

Example 30 with NULL

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

the class SeekCursorTestBase method shouldCatchupRootWhenRootNodeHasTooNewGeneration.

@Test
void shouldCatchupRootWhenRootNodeHasTooNewGeneration() throws Exception {
    // given
    long id = cursor.getCurrentPageId();
    long generation = TreeNode.generation(cursor);
    MutableBoolean triggered = new MutableBoolean(false);
    RootCatchup rootCatchup = fromId -> {
        triggered.setTrue();
        return new Root(id, generation);
    };
    // noinspection EmptyTryBlock
    try (SeekCursor<KEY, VALUE> ignored = new SeekCursor<>(cursor, node, key(0), key(1), layout, stableGeneration, unstableGeneration, generationSupplier, rootCatchup, generation - 1, exceptionDecorator, 1, LEAF_LEVEL, SeekCursor.NO_MONITOR, NULL)) {
    // do nothing
    }
    // then
    assertTrue(triggered.getValue());
}
Also used : Assertions.assertThrows(org.junit.jupiter.api.Assertions.assertThrows) BeforeEach(org.junit.jupiter.api.BeforeEach) Arrays(java.util.Arrays) PageCursor(org.neo4j.io.pagecache.PageCursor) LongSupplier(java.util.function.LongSupplier) RandomExtension(org.neo4j.test.extension.RandomExtension) SHARED_RESOURCE(org.neo4j.test.extension.ExecutionSharedContext.SHARED_RESOURCE) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) GenerationSafePointerPair.pointer(org.neo4j.index.internal.gbptree.GenerationSafePointerPair.pointer) ArrayList(java.util.ArrayList) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) Inject(org.neo4j.test.extension.Inject) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) RandomRule(org.neo4j.test.rule.RandomRule) LEAF(org.neo4j.index.internal.gbptree.TreeNode.Type.LEAF) NULL(org.neo4j.io.pagecache.context.CursorContext.NULL) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) DEFAULT_MAX_READ_AHEAD(org.neo4j.index.internal.gbptree.SeekCursor.DEFAULT_MAX_READ_AHEAD) IOException(java.io.IOException) LEAF_LEVEL(org.neo4j.index.internal.gbptree.SeekCursor.LEAF_LEVEL) ResourceLock(org.junit.jupiter.api.parallel.ResourceLock) String.format(java.lang.String.format) Test(org.junit.jupiter.api.Test) Consumer(java.util.function.Consumer) List(java.util.List) INTERNAL(org.neo4j.index.internal.gbptree.TreeNode.Type.INTERNAL) ValueMergers.overwrite(org.neo4j.index.internal.gbptree.ValueMergers.overwrite) DelegatingPageCursor(org.neo4j.io.pagecache.impl.DelegatingPageCursor) NO_MONITOR(org.neo4j.index.internal.gbptree.GBPTree.NO_MONITOR) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) MutableBoolean(org.apache.commons.lang3.mutable.MutableBoolean) Collections(java.util.Collections) MutableBoolean(org.apache.commons.lang3.mutable.MutableBoolean) Test(org.junit.jupiter.api.Test)

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