Search in sources :

Example 1 with CountsStore

use of org.neo4j.counts.CountsStore in project neo4j by neo4j.

the class CountsStoreTransactionApplierTest method shouldNotifyCacheAccessOnHowManyUpdatesOnCountsWeHadSoFar.

@Test
void shouldNotifyCacheAccessOnHowManyUpdatesOnCountsWeHadSoFar() throws Exception {
    // GIVEN
    final CountsStore counts = mock(CountsStore.class);
    final CountsAccessor.Updater updater = mock(CountsAccessor.Updater.class);
    when(counts.apply(anyLong(), any(CursorContext.class))).thenReturn(updater);
    final RelationshipGroupDegreesStore groupDegreesStore = mock(RelationshipGroupDegreesStore.class);
    when(groupDegreesStore.apply(anyLong(), any(CursorContext.class))).thenReturn(mock(RelationshipGroupDegreesStore.Updater.class));
    final CountsStoreTransactionApplierFactory applier = new CountsStoreTransactionApplierFactory(counts, groupDegreesStore);
    // WHEN
    try (TransactionApplier txApplier = applier.startTx(new GroupOfCommands(2L), mock(BatchContext.class))) {
        txApplier.visitNodeCountsCommand(new Command.NodeCountsCommand(ANY_LABEL, 1));
    }
    // THEN
    verify(updater).incrementNodeCount(ANY_LABEL, 1);
}
Also used : RelationshipGroupDegreesStore(org.neo4j.internal.counts.RelationshipGroupDegreesStore) CountsAccessor(org.neo4j.counts.CountsAccessor) CursorContext(org.neo4j.io.pagecache.context.CursorContext) CountsStore(org.neo4j.counts.CountsStore) Test(org.junit.jupiter.api.Test)

Example 2 with CountsStore

use of org.neo4j.counts.CountsStore in project neo4j by neo4j.

the class FullCheck method execute.

public ConsistencySummaryStatistics execute(PageCache pageCache, DirectStoreAccess stores, ThrowingSupplier<CountsStore, IOException> countsSupplier, ThrowingSupplier<RelationshipGroupDegreesStore, IOException> groupDegreesStoreSupplier, IndexAccessors.IndexAccessorLookup indexAccessorLookup, PageCacheTracer pageCacheTracer, MemoryTracker memoryTracker, Log log) throws ConsistencyCheckIncompleteException {
    ConsistencySummaryStatistics summary = new ConsistencySummaryStatistics();
    InconsistencyReport report = new InconsistencyReport(new InconsistencyMessageLogger(log, moreDescriptiveRecordToStrings(stores)), summary);
    CountsStore countsStore = getCountsStore(countsSupplier, log, summary);
    RelationshipGroupDegreesStore groupDegreesStore = getGroupDegreesStore(groupDegreesStoreSupplier, log, summary);
    execute(pageCache, stores, report, countsStore, groupDegreesStore, indexAccessorLookup, pageCacheTracer, memoryTracker);
    if (!summary.isConsistent()) {
        log.warn("Inconsistencies found: " + summary);
    }
    return summary;
}
Also used : InconsistencyReport(org.neo4j.consistency.report.InconsistencyReport) RelationshipGroupDegreesStore(org.neo4j.internal.counts.RelationshipGroupDegreesStore) InconsistencyMessageLogger(org.neo4j.consistency.report.InconsistencyMessageLogger) CountsStore(org.neo4j.counts.CountsStore) ConsistencySummaryStatistics(org.neo4j.consistency.report.ConsistencySummaryStatistics)

Example 3 with CountsStore

use of org.neo4j.counts.CountsStore in project neo4j by neo4j.

the class DetectAllRelationshipInconsistenciesIT method shouldDetectSabotagedRelationshipWhereEverItIs.

@Test
void shouldDetectSabotagedRelationshipWhereEverItIs() throws Exception {
    // GIVEN a database which lots of relationships
    GraphDatabaseAPI db = getGraphDatabaseAPI();
    Sabotage sabotage;
    try {
        Node[] nodes = new Node[1_000];
        Relationship[] relationships = new Relationship[10_000];
        long additionalNodeId;
        try (Transaction tx = db.beginTx()) {
            for (int i = 0; i < nodes.length; i++) {
                nodes[i] = tx.createNode(label("Foo"));
            }
            additionalNodeId = tx.createNode().getId();
            for (int i = 0; i < 10_000; i++) {
                relationships[i] = random.among(nodes).createRelationshipTo(random.among(nodes), MyRelTypes.TEST);
            }
            tx.commit();
        }
        // WHEN sabotaging a random relationship
        DependencyResolver resolver = db.getDependencyResolver();
        NeoStores neoStores = resolver.resolveDependency(RecordStorageEngine.class).testAccessNeoStores();
        RelationshipStore relationshipStore = neoStores.getRelationshipStore();
        Relationship sabotagedRelationships = random.among(relationships);
        sabotage = sabotage(relationshipStore, sabotagedRelationships.getId(), additionalNodeId);
    } finally {
        managementService.shutdown();
    }
    // THEN the checker should find it, where ever it is in the store
    db = getGraphDatabaseAPI();
    try {
        DependencyResolver resolver = db.getDependencyResolver();
        RecordStorageEngine storageEngine = resolver.resolveDependency(RecordStorageEngine.class);
        NeoStores neoStores = storageEngine.testAccessNeoStores();
        CountsStore counts = (CountsStore) storageEngine.countsAccessor();
        RelationshipGroupDegreesStore groupDegreesStore = storageEngine.relationshipGroupDegreesStore();
        DirectStoreAccess directStoreAccess = new DirectStoreAccess(neoStores, db.getDependencyResolver().resolveDependency(IndexProviderMap.class), db.getDependencyResolver().resolveDependency(TokenHolders.class), db.getDependencyResolver().resolveDependency(IndexStatisticsStore.class), db.getDependencyResolver().resolveDependency(IdGeneratorFactory.class));
        int threads = random.intBetween(2, 10);
        FullCheck checker = new FullCheck(ProgressMonitorFactory.NONE, threads, ConsistencyFlags.DEFAULT, getTuningConfiguration(), DebugContext.NO_DEBUG, NodeBasedMemoryLimiter.DEFAULT);
        AssertableLogProvider logProvider = new AssertableLogProvider(true);
        ConsistencySummaryStatistics summary = checker.execute(resolver.resolveDependency(PageCache.class), directStoreAccess, () -> counts, () -> groupDegreesStore, null, PageCacheTracer.NULL, INSTANCE, logProvider.getLog(FullCheck.class));
        int relationshipInconsistencies = summary.getInconsistencyCountForRecordType(RecordType.RELATIONSHIP);
        assertTrue(relationshipInconsistencies > 0, "Couldn't detect sabotaged relationship " + sabotage);
        assertThat(logProvider).containsMessages(sabotage.after.toString());
    } finally {
        managementService.shutdown();
    }
}
Also used : Node(org.neo4j.graphdb.Node) RelationshipGroupDegreesStore(org.neo4j.internal.counts.RelationshipGroupDegreesStore) DirectStoreAccess(org.neo4j.consistency.store.DirectStoreAccess) IdGeneratorFactory(org.neo4j.internal.id.IdGeneratorFactory) IndexProviderMap(org.neo4j.kernel.impl.api.index.IndexProviderMap) CountsStore(org.neo4j.counts.CountsStore) DependencyResolver(org.neo4j.common.DependencyResolver) GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) Transaction(org.neo4j.graphdb.Transaction) RecordStorageEngine(org.neo4j.internal.recordstorage.RecordStorageEngine) Relationship(org.neo4j.graphdb.Relationship) NeoStores(org.neo4j.kernel.impl.store.NeoStores) IndexStatisticsStore(org.neo4j.kernel.impl.api.index.stats.IndexStatisticsStore) RelationshipStore(org.neo4j.kernel.impl.store.RelationshipStore) TokenHolders(org.neo4j.token.TokenHolders) PageCache(org.neo4j.io.pagecache.PageCache) AssertableLogProvider(org.neo4j.logging.AssertableLogProvider) ConsistencySummaryStatistics(org.neo4j.consistency.report.ConsistencySummaryStatistics) Test(org.junit.jupiter.api.Test)

Aggregations

CountsStore (org.neo4j.counts.CountsStore)3 RelationshipGroupDegreesStore (org.neo4j.internal.counts.RelationshipGroupDegreesStore)3 Test (org.junit.jupiter.api.Test)2 ConsistencySummaryStatistics (org.neo4j.consistency.report.ConsistencySummaryStatistics)2 DependencyResolver (org.neo4j.common.DependencyResolver)1 InconsistencyMessageLogger (org.neo4j.consistency.report.InconsistencyMessageLogger)1 InconsistencyReport (org.neo4j.consistency.report.InconsistencyReport)1 DirectStoreAccess (org.neo4j.consistency.store.DirectStoreAccess)1 CountsAccessor (org.neo4j.counts.CountsAccessor)1 Node (org.neo4j.graphdb.Node)1 Relationship (org.neo4j.graphdb.Relationship)1 Transaction (org.neo4j.graphdb.Transaction)1 IdGeneratorFactory (org.neo4j.internal.id.IdGeneratorFactory)1 RecordStorageEngine (org.neo4j.internal.recordstorage.RecordStorageEngine)1 PageCache (org.neo4j.io.pagecache.PageCache)1 CursorContext (org.neo4j.io.pagecache.context.CursorContext)1 IndexProviderMap (org.neo4j.kernel.impl.api.index.IndexProviderMap)1 IndexStatisticsStore (org.neo4j.kernel.impl.api.index.stats.IndexStatisticsStore)1 NeoStores (org.neo4j.kernel.impl.store.NeoStores)1 RelationshipStore (org.neo4j.kernel.impl.store.RelationshipStore)1