diff --git 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 index 6c13dba..bfe3ceb 100644 --- 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 @@ -706,6 +706,8 @@ public class FileStore implements SegmentStore, Closeable { } } } + + stats.flushed(); } /** diff --git oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreMonitor.java oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreMonitor.java index 59062cc..21ba252 100644 --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreMonitor.java +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreMonitor.java @@ -34,6 +34,11 @@ interface FileStoreMonitor { public void reclaimed(long bytes) { } + + @Override + public void flushed() { + + } }; /** @@ -49,4 +54,9 @@ interface FileStoreMonitor { * @param bytes number of bytes reclaimed */ void reclaimed(long bytes); + + /** + * Notifies the monitor when journal data is flushed to disk. + */ + void flushed(); } diff --git oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreStats.java oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreStats.java index 09cd3af..2ebb27a 100644 --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreStats.java +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreStats.java @@ -34,16 +34,20 @@ import static org.apache.jackrabbit.stats.TimeSeriesStatsUtil.asCompositeData; public class FileStoreStats implements FileStoreStatsMBean, FileStoreMonitor { public static final String SEGMENT_REPO_SIZE = "SEGMENT_REPO_SIZE"; public static final String SEGMENT_WRITES = "SEGMENT_WRITES"; + public static final String JOURNAL_WRITES = "JOURNAL_WRITES"; + private final StatisticsProvider statisticsProvider; private final FileStore store; private final MeterStats writeStats; private final CounterStats repoSize; - + private final MeterStats journalWriteStats; + public FileStoreStats(StatisticsProvider statisticsProvider, FileStore store, long initialSize) { this.statisticsProvider = statisticsProvider; this.store = store; this.writeStats = statisticsProvider.getMeter(SEGMENT_WRITES, StatsOptions.DEFAULT); this.repoSize = statisticsProvider.getCounterStats(SEGMENT_REPO_SIZE, StatsOptions.DEFAULT); + this.journalWriteStats = statisticsProvider.getMeter(JOURNAL_WRITES, StatsOptions.DEFAULT); repoSize.inc(initialSize); } @@ -59,6 +63,11 @@ public class FileStoreStats implements FileStoreStatsMBean, FileStoreMonitor { public void reclaimed(long size) { repoSize.dec(size); } + + @Override + public void flushed() { + journalWriteStats.mark(); + } //~--------------------------------< FileStoreStatsMBean > @@ -91,6 +100,11 @@ public class FileStoreStats implements FileStoreStatsMBean, FileStoreMonitor { IOUtils.humanReadableByteCount(getApproximateSize()), getTarFileCount()); } + + @Override + public CompositeData getJournalWriteStats() { + return asCompositeData(getTimeSeries(JOURNAL_WRITES), JOURNAL_WRITES); + } private TimeSeries getTimeSeries(String name) { return statisticsProvider.getStats().getTimeSeries(name, true); diff --git oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreStatsMBean.java oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreStatsMBean.java index e7c5db8..931385d 100644 --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreStatsMBean.java +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreStatsMBean.java @@ -40,4 +40,9 @@ public interface FileStoreStatsMBean { CompositeData getRepositorySize(); String fileStoreInfoAsString(); + + /** + * @return time series of the writes to journal + */ + CompositeData getJournalWriteStats(); }