use of org.neo4j.io.pagecache.tracing.recording.RecordingPageCursorTracer.Pin in project neo4j by neo4j.
the class CommonAbstractStoreTest method recordCursorPinsEachPageItReads.
@Test
public void recordCursorPinsEachPageItReads() throws Exception {
File storeFile = dir.file("a");
RecordingPageCacheTracer tracer = new RecordingPageCacheTracer();
RecordingPageCursorTracer pageCursorTracer = new RecordingPageCursorTracer(Pin.class);
PageCacheRule.PageCacheConfig pageCacheConfig = config().withTracer(tracer).withCursorTracerSupplier(pageCursorTracerSupplier(pageCursorTracer));
PageCache pageCache = pageCacheRule.getPageCache(fileSystemRule.get(), pageCacheConfig, Config.empty());
try (NodeStore store = new NodeStore(storeFile, Config.empty(), new DefaultIdGeneratorFactory(fileSystemRule.get()), pageCache, NullLogProvider.getInstance(), null, Standard.LATEST_RECORD_FORMATS)) {
store.initialise(true);
assertNull(tracer.tryObserve(Event.class));
long nodeId1 = insertNodeRecordAndObservePinEvent(pageCursorTracer, store);
long nodeId2 = insertNodeRecordAndObservePinEvent(pageCursorTracer, store);
try (RecordCursor<NodeRecord> cursor = store.newRecordCursor(store.newRecord())) {
cursor.acquire(0, RecordLoad.NORMAL);
assertTrue(cursor.next(nodeId1));
assertTrue(cursor.next(nodeId2));
}
// Because both nodes hit the same page, the code will only pin the page once and thus only emit one pin
// event. This pin event will not be observable until after we have closed the cursor. We could
// alternatively have chosen nodeId2 to be on a different page than nodeId1. In that case, the pin event
// for nodeId1 would have been visible after our call to cursor.next( nodeId2 ).
assertNotNull(pageCursorTracer.tryObserve(Pin.class));
assertNull(pageCursorTracer.tryObserve(Event.class));
}
}
Aggregations