You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2016/09/15 07:18:08 UTC

svn commit: r1760854 - /jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/HybridIndexTest.java

Author: chetanm
Date: Thu Sep 15 07:18:08 2016
New Revision: 1760854

URL: http://svn.apache.org/viewvc?rev=1760854&view=rev
Log:
OAK-4412 - Lucene hybrid index

Benchmarking - Introduce a notion of mutator which would change the indexed property values. Also make stats provider static such that it can be used in DocumentNodeStore for testing purpose

Modified:
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/HybridIndexTest.java

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/HybridIndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/HybridIndexTest.java?rev=1760854&r1=1760853&r2=1760854&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/HybridIndexTest.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/HybridIndexTest.java Thu Sep 15 07:18:08 2016
@@ -21,6 +21,7 @@ package org.apache.jackrabbit.oak.benchm
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Queue;
 import java.util.Random;
@@ -84,8 +85,14 @@ import static org.apache.jackrabbit.oak.
 
 public class HybridIndexTest extends AbstractTest<HybridIndexTest.TestContext> {
 
-    private ScheduledExecutorService executorService = MoreExecutors.getExitingScheduledExecutorService(
+    private static final ScheduledExecutorService executorService = MoreExecutors.getExitingScheduledExecutorService(
             (ScheduledThreadPoolExecutor) Executors.newScheduledThreadPool(5));
+    private static final boolean metricStatsEnabled =
+            Boolean.parseBoolean(System.getProperty("metricStatsEnabled", "true"));
+    private static MetricStatisticsProvider metricStatsProvider;
+    public static final StatisticsProvider STATISTICS_PROVIDER = getStatsProvider(metricStatsEnabled);
+
+
     private final Random random = new Random(42); //fixed seed
     private String indexedPropName = "foo";
     private int nodesPerIteration = Integer.getInteger("nodesPerIteration", 25);
@@ -94,7 +101,7 @@ public class HybridIndexTest extends Abs
     private int asyncInterval = Integer.getInteger("asyncInterval", 5);
     private int queueSize = Integer.getInteger("queueSize", 1000);
     private boolean hybridIndexEnabled = Boolean.getBoolean("hybridIndexEnabled");
-    private boolean metricStatsEnabled = Boolean.parseBoolean(System.getProperty("metricStatsEnabled", "true"));
+
     private boolean searcherEnabled = Boolean.parseBoolean(System.getProperty("searcherEnabled", "true"));
     private File indexCopierDir;
     private IndexCopier copier;
@@ -109,9 +116,10 @@ public class HybridIndexTest extends Abs
             "STOPPED", "ABORTED");
     private final File workDir;
     private Whiteboard whiteboard;
-    private MetricStatisticsProvider metricStatsProvider;
     private Searcher searcher;
+    private Mutator mutator;
     private final AtomicInteger indexedNodeCount = new AtomicInteger();
+    private List<TestContext> contexts = new ArrayList<>();
 
     public HybridIndexTest(File workDir) {
         this.workDir = workDir;
@@ -151,16 +159,22 @@ public class HybridIndexTest extends Abs
             runAsyncIndex();
         }
         defaultContext = new TestContext();
+        contexts.add(defaultContext);
         searcher = new Searcher();
+        mutator = new Mutator();
 
         if (searcherEnabled) {
             addBackgroundJob(searcher);
         }
+
+        addBackgroundJob(mutator);
     }
 
     @Override
     protected TestContext prepareThreadExecutionContext() throws RepositoryException {
-        return new TestContext();
+        TestContext ctx = new TestContext();
+        contexts.add(ctx);
+        return ctx;
     }
 
     @Override
@@ -195,16 +209,18 @@ public class HybridIndexTest extends Abs
             getAsyncIndexUpdate().close();
             queue.close();
             nrtIndexFactory.close();
-            dumpStats();
         }
 
+        dumpStats();
+
         if (indexCopierDir != null) {
             FileUtils.deleteDirectory(indexCopierDir);
         }
         System.out.printf("numOfIndexes: %d, refreshDeltaMillis: %d, asyncInterval: %d, queueSize: %d , " +
                         "hybridIndexEnabled: %s, metricStatsEnabled: %s %n", numOfIndexes, refreshDeltaMillis,
                 asyncInterval, queueSize, hybridIndexEnabled, metricStatsEnabled);
-        System.out.printf("Searcher: %d, indexedNodeCount: %d %n", searcher.resultSize, indexedNodeCount.get());
+        System.out.printf("Searcher: %d, Mutator: %d, indexedNodeCount: %d %n", searcher.resultSize, mutator
+                .mutationCount, indexedNodeCount.get());
     }
 
     private void dumpStats() {
@@ -216,7 +232,7 @@ public class HybridIndexTest extends Abs
                 .filter(new MetricFilter() {
                     @Override
                     public boolean matches(String name, Metric metric) {
-                        return name.startsWith("HYBRID");
+                        return name.startsWith("HYBRID") || name.startsWith("DOCUMENT_NS_MERGE");
                     }
                 })
                 .build()
@@ -232,6 +248,10 @@ public class HybridIndexTest extends Abs
         public TestContext() throws RepositoryException {
             dump = session.getRootNode()
                     .addNode(nextNodeName(), NT_OAK_UNSTRUCTURED)
+                    .addNode(nextNodeName(), NT_OAK_UNSTRUCTURED)
+                    .addNode(nextNodeName(), NT_OAK_UNSTRUCTURED)
+                    .addNode(nextNodeName(), NT_OAK_UNSTRUCTURED)
+                    .addNode(nextNodeName(), NT_OAK_UNSTRUCTURED)
                     .addNode(nextNodeName(), NT_OAK_UNSTRUCTURED);
             session.save();
             paths.add(dump.getPath());
@@ -268,11 +288,7 @@ public class HybridIndexTest extends Abs
                 null, //augmentorFactory
                 mip);
 
-        StatisticsProvider sp = StatisticsProvider.NOOP;
-        if (metricStatsEnabled) {
-            metricStatsProvider = new MetricStatisticsProvider(null, executorService);
-            sp = metricStatsProvider;
-        }
+        StatisticsProvider sp = STATISTICS_PROVIDER;
         queue = new DocumentQueue(queueSize, tracker, executorService, sp);
         localIndexObserver = new LocalIndexObserver(queue, sp);
     }
@@ -298,6 +314,16 @@ public class HybridIndexTest extends Abs
         return createdFolder;
     }
 
+    private static StatisticsProvider getStatsProvider(boolean metricStatsEnabled){
+        StatisticsProvider sp = StatisticsProvider.NOOP;
+        if (metricStatsEnabled) {
+            metricStatsProvider = new MetricStatisticsProvider(null, executorService);
+            sp = metricStatsProvider;
+        }
+        return sp;
+    }
+
+
     private class PropertyIndexInitializer implements RepositoryInitializer {
 
         @Override
@@ -363,4 +389,28 @@ public class HybridIndexTest extends Abs
             resultSize += Iterators.size(Iterators.limit(result.getNodes(), 500));
         }
     }
+
+    private class Mutator implements Runnable {
+        final Session session = loginWriter();
+        int mutationCount = 0;
+        @Override
+        public void run() {
+            try{
+                run0();
+            } catch (RepositoryException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        private void run0() throws RepositoryException {
+            TestContext ctx = contexts.get(random.nextInt(contexts.size()));
+            String path = ctx.paths.peek();
+            session.refresh(false);
+            if (path != null){
+                session.getNode(path).setProperty(indexedPropName, nextIndexedValue());
+                session.save();
+                mutationCount++;
+            }
+        }
+    }
 }