diff --git a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/CopyOnReadStatsMBean.java b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/CopyOnReadStatsMBean.java index bd825bb..b6bfa78 100644 --- a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/CopyOnReadStatsMBean.java +++ b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/CopyOnReadStatsMBean.java @@ -69,6 +69,8 @@ public interface CopyOnReadStatsMBean { String getLocalIndexSize(); + long getLocalIndexDirSize(); + String[] getGarbageDetails(); String getGarbageSize(); diff --git a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopier.java b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopier.java index 33a687b..136dc71 100644 --- a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopier.java +++ b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopier.java @@ -547,6 +547,11 @@ public class IndexCopier implements CopyOnReadStatsMBean, Closeable { } @Override + public long getLocalIndexDirSize() { + return indexRootDirectory.getSize(); + } + + @Override public String[] getGarbageDetails() { return toArray(transform(failedToDeleteFiles.values(), new Function() { diff --git a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorProvider.java b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorProvider.java index db5881f..5320a95 100644 --- a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorProvider.java +++ b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorProvider.java @@ -233,8 +233,8 @@ public class LuceneIndexEditorProvider implements IndexEditorProvider { if (propertyIndexUpdateCallback != null) { callbacks.add(propertyIndexUpdateCallback); } - if (mbean != null && statisticsProvider != null) { - callbacks.add(new LuceneIndexStatsUpdateCallback(indexPath, mbean, statisticsProvider)); + if (mbean != null && statisticsProvider != null && indexCopier != null) { + callbacks.add(new LuceneIndexStatsUpdateCallback(indexPath, mbean, statisticsProvider, indexCopier)); } if (!callbacks.isEmpty()) { diff --git a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexStatsUpdateCallback.java b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexStatsUpdateCallback.java index ee737f0..b6e3d58 100644 --- a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexStatsUpdateCallback.java +++ b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexStatsUpdateCallback.java @@ -22,6 +22,7 @@ import org.apache.jackrabbit.oak.api.CommitFailedException; import org.apache.jackrabbit.oak.api.PropertyState; import org.apache.jackrabbit.oak.plugins.index.search.PropertyDefinition; import org.apache.jackrabbit.oak.plugins.index.search.PropertyUpdateCallback; +import org.apache.jackrabbit.oak.stats.CounterStats; import org.apache.jackrabbit.oak.stats.HistogramStats; import org.apache.jackrabbit.oak.stats.StatisticsProvider; import org.apache.jackrabbit.oak.stats.StatsOptions; @@ -39,18 +40,21 @@ public class LuceneIndexStatsUpdateCallback implements PropertyUpdateCallback { private static final String NO_DOCS = "_NO_DOCS"; private static final String INDEX_SIZE = "_INDEX_SIZE"; + private static final String LOCAL_INDEX_DIR_SIZE = "LOCAL_INDEX_DIR_SIZE"; private final Logger log = LoggerFactory.getLogger(getClass()); private final String indexPath; private final LuceneIndexMBean luceneIndexMBean; private final StatisticsProvider statisticsProvider; + private final IndexCopier indexCopier; LuceneIndexStatsUpdateCallback(String indexPath, @NotNull LuceneIndexMBean luceneIndexMBean, - @NotNull StatisticsProvider statisticsProvider) { + @NotNull StatisticsProvider statisticsProvider, @NotNull IndexCopier indexCopier) { this.indexPath = indexPath; this.luceneIndexMBean = luceneIndexMBean; this.statisticsProvider = statisticsProvider; + this.indexCopier = indexCopier; } @Override @@ -69,7 +73,17 @@ public class LuceneIndexStatsUpdateCallback implements PropertyUpdateCallback { HistogramStats indexSizeHistogram = statisticsProvider.getHistogram(indexPath + INDEX_SIZE, StatsOptions.METRICS_ONLY); indexSizeHistogram.update(indexSize); + long localIndexDirSize = indexCopier.getLocalIndexDirSize(); + + CounterStats indexDirectorySizeStats = statisticsProvider.getCounterStats(LOCAL_INDEX_DIR_SIZE, StatsOptions.DEFAULT); + long deltaInSize = localIndexDirSize - indexDirectorySizeStats.getCount(); + if (deltaInSize != 0) { + indexDirectorySizeStats.inc(deltaInSize); + log.debug("index directory size stats updated; size {} delta {}", localIndexDirSize, deltaInSize); + } + log.debug("{} stats updated; docCount {}, size {}", indexPath, docCount, indexSize); + } catch (IOException e) { log.debug("could not update no_docs/index_size stats for index at {}", indexPath, e); }