Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java =================================================================== --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java (revision 1814707) +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java (working copy) @@ -29,6 +29,7 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.ExecutionException; +import java.util.concurrent.atomic.AtomicInteger; import javax.annotation.CheckForNull; import javax.annotation.Nonnull; @@ -129,11 +130,20 @@ protected final IOMonitor ioMonitor; + static final AtomicInteger dataSegmentIdAllocations = new AtomicInteger(); + + static final AtomicInteger bulkSegmentIdAllocations = new AtomicInteger(); + AbstractFileStore(final FileStoreBuilder builder) { this.directory = builder.getDirectory(); this.tracker = new SegmentTracker(new SegmentIdFactory() { @Override @Nonnull public SegmentId newSegmentId(long msb, long lsb) { + if (SegmentId.isDataSegmentId(lsb)) { + dataSegmentIdAllocations.incrementAndGet(); + } else { + bulkSegmentIdAllocations.incrementAndGet(); + } return new SegmentId(AbstractFileStore.this, msb, lsb, segmentCache::recordHit); } }); Index: oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java =================================================================== --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java (revision 1814707) +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java (working copy) @@ -59,6 +59,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import java.util.function.Consumer; @@ -164,6 +165,14 @@ @Nonnull private final SegmentNotFoundExceptionListener snfeListener; + private static final AtomicInteger uncachedDataSegmentReads = new AtomicInteger(); + + private static final AtomicInteger uncachedBulkSegmentReads = new AtomicInteger(); + + private static final AtomicInteger writtenDataSegments = new AtomicInteger(); + + private static final AtomicInteger writtenBulkSegments = new AtomicInteger(); + FileStore(final FileStoreBuilder builder) throws InvalidFileStoreVersionException, IOException { super(builder); @@ -477,6 +486,12 @@ fileReaper.reap(); log.info("TarMK closed: {}", directory); + log.info("TarMK data segment ID allocations: {}", dataSegmentIdAllocations); + log.info("TarMK bulk segment ID allocations: {}", bulkSegmentIdAllocations); + log.info("TarMK uncached data segment reads: {}", uncachedDataSegmentReads); + log.info("TarMK uncached bulk segment reads: {}", uncachedBulkSegmentReads); + log.info("TarMK written data segments......: {}", writtenDataSegments); + log.info("TarMK written bulk segments......: {}", writtenBulkSegments); } @Override @@ -490,7 +505,14 @@ @Nonnull public Segment readSegment(final SegmentId id) { try (ShutDownCloser ignored = shutDown.keepAlive()) { - return segmentCache.getSegment(id, () -> readSegmentUncached(tarFiles, id)); + return segmentCache.getSegment(id, () -> { + if (id.isDataSegmentId()) { + uncachedDataSegmentReads.incrementAndGet(); + } else { + uncachedBulkSegmentReads.incrementAndGet(); + } + return readSegmentUncached(tarFiles, id); + }); } catch (ExecutionException e) { SegmentNotFoundException snfe = asSegmentNotFoundException(e, id); snfeListener.notify(id, snfe); @@ -526,6 +548,10 @@ generation = segment.getGcGeneration(); references = readReferences(segment); binaryReferences = readBinaryReferences(segment); + + writtenDataSegments.incrementAndGet(); + } else { + writtenBulkSegments.incrementAndGet(); } tarFiles.writeSegment(