Author: chetanm
Date: Mon Oct 9 06:38:27 2017
New Revision: 1811535
URL: http://svn.apache.org/viewvc?rev=1811535&view=rev
Log:
OAK-6535 - Synchronous Lucene Property Indexes
Collect some metrics around cleanup. For now collecting
- the time taken to do one run
- meter on number of noop runs
Modified:
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/HybridIndexTest.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleaner.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleanerTest.java
Modified:
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/HybridIndexTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/HybridIndexTest.java?rev=1811535&r1=1811534&r2=1811535&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/HybridIndexTest.java
(original)
+++
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/HybridIndexTest.java
Mon Oct 9 06:38:27 2017
@@ -390,7 +390,7 @@ public class HybridIndexTest extends Abs
luceneEditorProvider.setIndexingQueue(queue);
if (syncIndexing) {
- PropertyIndexCleaner cleaner = new PropertyIndexCleaner(nodeStore,
indexPathService, asyncIndexInfoService);
+ PropertyIndexCleaner cleaner = new PropertyIndexCleaner(nodeStore,
indexPathService, asyncIndexInfoService, statsProvider);
regs.add(scheduleWithFixedDelay(whiteboard, cleaner,
cleanerIntervalInSecs, true, true));
}
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java?rev=1811535&r1=1811534&r2=1811535&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
Mon Oct 9 06:38:27 2017
@@ -794,7 +794,7 @@ public class LuceneIndexProviderService
return;
}
- cleaner = new PropertyIndexCleaner(nodeStore, indexPathService,
asyncIndexInfoService);
+ cleaner = new PropertyIndexCleaner(nodeStore, indexPathService,
asyncIndexInfoService, statisticsProvider);
oakRegs.add(scheduleWithFixedDelay(whiteboard, cleaner,
ImmutableMap.of("scheduler.name",
PropertyIndexCleaner.class.getName()),
cleanerInterval, true, true));
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleaner.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleaner.java?rev=1811535&r1=1811534&r2=1811535&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleaner.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleaner.java
Mon Oct 9 06:38:27 2017
@@ -49,6 +49,10 @@ import org.apache.jackrabbit.oak.spi.sta
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.stats.MeterStats;
+import org.apache.jackrabbit.oak.stats.StatisticsProvider;
+import org.apache.jackrabbit.oak.stats.StatsOptions;
+import org.apache.jackrabbit.oak.stats.TimerStats;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -69,11 +73,18 @@ public class PropertyIndexCleaner implem
private UniqueIndexCleaner uniqueIndexCleaner = new
UniqueIndexCleaner(TimeUnit.HOURS, 1);
private Map<String, Long> lastAsyncInfo = Collections.emptyMap();
+ private final TimerStats cleanupTime;
+ private final MeterStats noopMeter;
+
public PropertyIndexCleaner(NodeStore nodeStore, IndexPathService
indexPathService,
- AsyncIndexInfoService asyncIndexInfoService) {
+ AsyncIndexInfoService asyncIndexInfoService,
+ StatisticsProvider statsProvider) {
this.nodeStore = checkNotNull(nodeStore);
this.indexPathService = checkNotNull(indexPathService);
this.asyncIndexInfoService = checkNotNull(asyncIndexInfoService);
+
+ this.cleanupTime = statsProvider.getTimer("HYBRID_PROPERTY_CLEANER",
StatsOptions.METRICS_ONLY);
+ this.noopMeter = statsProvider.getMeter("HYBRID_PROPERTY_NOOP",
StatsOptions.METRICS_ONLY);
}
@Override
@@ -97,6 +108,7 @@ public class PropertyIndexCleaner implem
Map<String, Long> asyncInfo =
asyncIndexInfoService.getIndexedUptoPerLane();
if (lastAsyncInfo.equals(asyncInfo) && !forceCleanup) {
log.debug("No change found in async state from last run {}.
Skipping the run", asyncInfo);
+ noopMeter.mark();
return stats;
}
@@ -114,6 +126,8 @@ public class PropertyIndexCleaner implem
log.debug("Property index cleanup done in {}. {}", w, stats);
}
+ cleanupTime.update(w.elapsed(TimeUnit.NANOSECONDS),
TimeUnit.NANOSECONDS);
+
return stats;
}
Modified:
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleanerTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleanerTest.java?rev=1811535&r1=1811534&r2=1811535&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleanerTest.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleanerTest.java
Mon Oct 9 06:38:27 2017
@@ -48,6 +48,7 @@ import org.apache.jackrabbit.oak.spi.sta
import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.apache.jackrabbit.oak.stats.Clock;
+import org.apache.jackrabbit.oak.stats.StatisticsProvider;
import org.json.simple.parser.ParseException;
import org.junit.Before;
import org.junit.Test;
@@ -85,7 +86,7 @@ public class PropertyIndexCleanerTest {
addIndex(indexPath, defnb);
PropertyIndexCleaner cleaner =
- new PropertyIndexCleaner(nodeStore, () ->
asList("/oak:index/uuid", indexPath), asyncService);
+ new PropertyIndexCleaner(nodeStore, () ->
asList("/oak:index/uuid", indexPath), asyncService, StatisticsProvider.NOOP);
//As index is yet not update it would not show up in sync index paths
assertThat(cleaner.getSyncIndexPaths(), empty());
@@ -107,7 +108,7 @@ public class PropertyIndexCleanerTest {
addIndex(indexPath, defnb);
PropertyIndexCleaner cleaner =
- new PropertyIndexCleaner(nodeStore, () ->
asList("/oak:index/uuid", indexPath), asyncService);
+ new PropertyIndexCleaner(nodeStore, () ->
asList("/oak:index/uuid", indexPath), asyncService, StatisticsProvider.NOOP);
NodeBuilder builder = nodeStore.getRoot().builder();
PropertyIndexUpdateCallback cb = newCallback(builder, indexPath);
@@ -152,7 +153,7 @@ public class PropertyIndexCleanerTest {
addIndex(indexPath, defnb);
PropertyIndexCleaner cleaner =
- new PropertyIndexCleaner(nodeStore, () ->
asList("/oak:index/uuid", indexPath), asyncService);
+ new PropertyIndexCleaner(nodeStore, () ->
asList("/oak:index/uuid", indexPath), asyncService, StatisticsProvider.NOOP);
cleaner.setCreatedTimeThreshold(TimeUnit.MILLISECONDS, 100);
clock.waitUntil(1000);
@@ -217,7 +218,7 @@ public class PropertyIndexCleanerTest {
addIndex(indexPath, defnb);
PropertyIndexCleaner cleaner =
- new PropertyIndexCleaner(nodeStore, () ->
asList("/oak:index/uuid", indexPath), asyncService);
+ new PropertyIndexCleaner(nodeStore, () ->
asList("/oak:index/uuid", indexPath), asyncService, StatisticsProvider.NOOP);
NodeBuilder builder = nodeStore.getRoot().builder();
PropertyIndexUpdateCallback cb = newCallback(builder, indexPath);