use of org.neo4j.io.pagecache.tracing.PageCacheTracer.NULL in project neo4j by neo4j.
the class NumberArrayTest method arrays.
public static Collection<NumberArrayTestData> arrays() {
PageCache pageCache = fixture.pageCache;
Path dir = fixture.directory;
NullLog log = NullLog.getInstance();
Collection<NumberArrayTestData> list = new ArrayList<>();
Map<String, NumberArrayFactory> factories = new HashMap<>();
factories.put("HEAP", NumberArrayFactories.HEAP);
factories.put("OFF_HEAP", NumberArrayFactories.OFF_HEAP);
factories.put("AUTO_WITHOUT_PAGECACHE", NumberArrayFactories.AUTO_WITHOUT_PAGECACHE);
factories.put("CHUNKED_FIXED_SIZE", NumberArrayFactories.CHUNKED_FIXED_SIZE);
factories.put("autoWithPageCacheFallback", NumberArrayFactories.auto(pageCache, NULL, dir, true, NO_MONITOR, log, DEFAULT_DATABASE_NAME));
factories.put("PageCachedNumberArrayFactory", new PageCachedNumberArrayFactory(pageCache, NULL, dir, log, DEFAULT_DATABASE_NAME));
for (Map.Entry<String, NumberArrayFactory> entry : factories.entrySet()) {
String name = entry.getKey() + " => ";
NumberArrayFactory factory = entry.getValue();
list.add(arrayData(name + "IntArray", factory.newIntArray(INDEXES, -1, INSTANCE), random -> random.nextInt(1_000_000_000), (array, index, value) -> array.set(index, (Integer) value), IntArray::get));
list.add(arrayData(name + "DynamicIntArray", factory.newDynamicIntArray(CHUNK_SIZE, -1, INSTANCE), random -> random.nextInt(1_000_000_000), (array, index, value) -> array.set(index, (Integer) value), IntArray::get));
list.add(arrayData(name + "LongArray", factory.newLongArray(INDEXES, -1, INSTANCE), random -> random.nextLong(1_000_000_000), (array, index, value) -> array.set(index, (Long) value), LongArray::get));
list.add(arrayData(name + "DynamicLongArray", factory.newDynamicLongArray(CHUNK_SIZE, -1, INSTANCE), random -> random.nextLong(1_000_000_000), (array, index, value) -> array.set(index, (Long) value), LongArray::get));
list.add(arrayData(name + "ByteArray5", factory.newByteArray(INDEXES, defaultByteArray(5), INSTANCE), random -> random.nextInt(1_000_000_000), (array, index, value) -> array.setInt(index, 1, (Integer) value), (array, index) -> array.getInt(index, 1)));
list.add(arrayData(name + "DynamicByteArray5", factory.newDynamicByteArray(CHUNK_SIZE, defaultByteArray(5), INSTANCE), random -> random.nextInt(1_000_000_000), (array, index, value) -> array.setInt(index, 1, (Integer) value), (array, index) -> array.getInt(index, 1)));
Function<RandomRule, Object> valueGenerator = random -> new long[] { random.nextLong(), random.nextInt(), (short) random.nextInt(), (byte) random.nextInt() };
Writer<ByteArray> writer = (array, index, value) -> {
long[] values = (long[]) value;
array.setLong(index, 0, values[0]);
array.setInt(index, 8, (int) values[1]);
array.setShort(index, 12, (short) values[2]);
array.setByte(index, 14, (byte) values[3]);
};
Reader<ByteArray> reader = (array, index) -> new long[] { array.getLong(index, 0), array.getInt(index, 8), array.getShort(index, 12), array.getByte(index, 14) };
list.add(arrayData(name + "ByteArray15", factory.newByteArray(INDEXES, defaultByteArray(15), INSTANCE), valueGenerator, writer, reader));
list.add(arrayData(name + "DynamicByteArray15", factory.newDynamicByteArray(CHUNK_SIZE, defaultByteArray(15), INSTANCE), valueGenerator, writer, reader));
}
return list;
}
use of org.neo4j.io.pagecache.tracing.PageCacheTracer.NULL in project neo4j by neo4j.
the class DynamicIndexStoreViewTest method shouldVisitAllRelationshipsWithoutTokenIndexes.
@Test
void shouldVisitAllRelationshipsWithoutTokenIndexes() {
StubStorageCursors cursors = new StubStorageCursors().withoutTokenIndexes();
IndexProxyProvider indexProxies = mock(IndexProxyProvider.class);
int targetType = 1;
int notTargetType = 2;
int[] targetTypeArray = { targetType };
String targetPropertyKey = "key";
Value propertyValue = Values.stringValue("value");
MutableLongList relationshipsWithTargetType = LongLists.mutable.empty();
long id = 0;
int wantedPropertyUpdates = 5;
for (int i = 0; i < wantedPropertyUpdates; i++) {
// Relationship fitting our target
cursors.withRelationship(id, 1, targetType, 3).properties(targetPropertyKey, propertyValue);
relationshipsWithTargetType.add(id++);
// Relationship with different type
cursors.withRelationship(id, 1, notTargetType, 3).properties(targetPropertyKey, propertyValue);
relationshipsWithTargetType.add(id++);
}
int targetPropertyKeyId = cursors.propertyKeyTokenHolder().getIdByName(targetPropertyKey);
IntPredicate propertyKeyIdFilter = value -> value == targetPropertyKeyId;
DynamicIndexStoreView storeView = dynamicIndexStoreView(cursors, indexProxies);
TestTokenScanConsumer tokenConsumer = new TestTokenScanConsumer();
TestPropertyScanConsumer propertyScanConsumer = new TestPropertyScanConsumer();
StoreScan storeScan = storeView.visitRelationships(targetTypeArray, propertyKeyIdFilter, propertyScanConsumer, tokenConsumer, false, true, NULL, INSTANCE);
storeScan.run(StoreScan.NO_EXTERNAL_UPDATES);
assertThat(tokenConsumer.batches.size()).isEqualTo(1);
assertThat(tokenConsumer.batches.get(0).size()).isEqualTo(relationshipsWithTargetType.size());
}
use of org.neo4j.io.pagecache.tracing.PageCacheTracer.NULL in project neo4j by neo4j.
the class ReadEntityIdsStepUsingTokenIndexTest method shouldSeeRecentUpdatesRightInFrontOfExternalUpdatesPoint.
@Test
void shouldSeeRecentUpdatesRightInFrontOfExternalUpdatesPoint() throws Exception {
// given
long entityCount = 1_000 + random.nextInt(100);
BitSet expectedEntityIds = new BitSet();
BitSet seenEntityIds = new BitSet();
try (var indexAccessor = indexAccessor()) {
populateTokenIndex(indexAccessor, expectedEntityIds, entityCount);
Configuration configuration = withBatchSize(DEFAULT, 100);
Stage stage = new Stage("Test", null, configuration, 0) {
{
add(new ReadEntityIdsStep(control(), configuration, cursorContext -> new TokenIndexScanIdIterator(indexAccessor.newTokenReader(), new int[] { TOKEN_ID }, CursorContext.NULL), NULL, new ControlledUpdatesCheck(indexAccessor, expectedEntityIds), new AtomicBoolean(true)));
add(new CollectEntityIdsStep(control(), configuration, seenEntityIds));
}
};
// when
stage.execute().awaitCompletion();
// then
assertThat(seenEntityIds).isEqualTo(expectedEntityIds);
}
}
use of org.neo4j.io.pagecache.tracing.PageCacheTracer.NULL in project neo4j by neo4j.
the class GBPTreeGenericCountsStore method updater.
// === Writes ===
protected CountUpdater updater(long txId, CursorContext cursorContext) {
// In order to keep the cache limited then check if we need to flush to the tree
if (txId % 10 == 0) {
// Although it's somewhat costly to check map size so only do it every N transaction.
checkCacheSizeAndPotentiallyFlush(cursorContext);
}
Lock lock = lock(this.lock.readLock());
boolean alreadyApplied = txIdInformation.txIdIsAlreadyApplied(txId);
// Why have this check below? Why should we not apply transactions before started when we have an initial counts builder?
// Consider the following scenario:
// - Create node N
// - Checkpoint
// - Delete node N
// - Crash
// - Delete counts store
// - Startup, where recovery starts
// - Recovery replays deletion of N
// - After recovery the counts store is rebuilt from scratch
//
// The deletion of N on the empty counts store would have resulted in a count of -1, which is not OK to write to the tree,
// since there can never be a negative amount of, say nodes. The counts store will be rebuilt after recovery anyway,
// so ignore these transactions.
boolean inRecoveryOnEmptyCountsStore = needsRebuild && !started;
if (alreadyApplied || inRecoveryOnEmptyCountsStore) {
lock.unlock();
monitor.ignoredTransaction(txId);
return null;
}
return new CountUpdater(new MapWriter(key -> readCountFromTree(key, cursorContext), changes, idSequence, txId), lock);
}
use of org.neo4j.io.pagecache.tracing.PageCacheTracer.NULL in project neo4j by neo4j.
the class OnlineIndexUpdatesTest method setUp.
@BeforeEach
void setUp() throws IOException {
life = new LifeSupport();
Config config = Config.defaults();
NullLogProvider nullLogProvider = NullLogProvider.getInstance();
StoreFactory storeFactory = new StoreFactory(databaseLayout, config, new DefaultIdGeneratorFactory(fileSystem, immediate(), databaseLayout.getDatabaseName()), pageCache, fileSystem, nullLogProvider, NULL, writable());
neoStores = storeFactory.openAllNeoStores(true);
GBPTreeCountsStore counts = new GBPTreeCountsStore(pageCache, databaseLayout.countStore(), fileSystem, immediate(), new CountsComputer(neoStores, pageCache, NULL, databaseLayout, INSTANCE, NullLog.getInstance()), writable(), NULL, GBPTreeCountsStore.NO_MONITOR, databaseLayout.getDatabaseName(), 1_000);
life.add(wrapInLifecycle(counts));
nodeStore = neoStores.getNodeStore();
relationshipStore = neoStores.getRelationshipStore();
PropertyStore propertyStore = neoStores.getPropertyStore();
schemaCache = new SchemaCache(new StandardConstraintRuleAccessor(), index -> index);
propertyPhysicalToLogicalConverter = new PropertyPhysicalToLogicalConverter(neoStores.getPropertyStore(), CursorContext.NULL);
life.start();
propertyCreator = new PropertyCreator(neoStores.getPropertyStore(), new PropertyTraverser(CursorContext.NULL), CursorContext.NULL, INSTANCE);
recordAccess = new DirectRecordAccess<>(neoStores.getPropertyStore(), Loaders.propertyLoader(propertyStore, CursorContext.NULL));
}
Aggregations