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);


Reply via email to