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);
}
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;
}
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();
}
}
Aggregations