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 2017/05/23 09:39:38 UTC

svn commit: r1795885 - in /jackrabbit/oak/trunk/oak-run: ./ src/main/java/org/apache/jackrabbit/oak/console/ src/main/java/org/apache/jackrabbit/oak/run/cli/ src/test/java/org/apache/jackrabbit/oak/run/

Author: chetanm
Date: Tue May 23 09:39:37 2017
New Revision: 1795885

URL: http://svn.apache.org/viewvc?rev=1795885&view=rev
Log:
OAK-6210 - Provide a consistent and extensible way to handle oak-run options while creating NodeStore

With '--metrics' options a MetricsStatisticsProvider would be configured
If not specified StatisticsProvider.NOOP would be used

Modified:
    jackrabbit/oak/trunk/oak-run/pom.xml
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/console/NodeStoreFixture.java
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/console/SegmentTarFixture.java
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/CommonOptions.java
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/NodeStoreFixtureProvider.java
    jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/JsonIndexTest.java

Modified: jackrabbit/oak/trunk/oak-run/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/pom.xml?rev=1795885&r1=1795884&r2=1795885&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-run/pom.xml Tue May 23 09:39:37 2017
@@ -305,6 +305,11 @@
       <artifactId>org.apache.felix.inventory</artifactId>
       <version>1.0.4</version>
     </dependency>
+    <dependency>
+      <groupId>io.dropwizard.metrics</groupId>
+      <artifactId>metrics-core</artifactId>
+      <version>3.1.0</version>
+    </dependency>
 
     <!-- Findbugs annotations -->
     <dependency>

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/console/NodeStoreFixture.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/console/NodeStoreFixture.java?rev=1795885&r1=1795884&r2=1795885&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/console/NodeStoreFixture.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/console/NodeStoreFixture.java Tue May 23 09:39:37 2017
@@ -23,6 +23,7 @@ import javax.annotation.CheckForNull;
 
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.stats.StatisticsProvider;
 
 public interface NodeStoreFixture extends Closeable {
 
@@ -31,4 +32,6 @@ public interface NodeStoreFixture extend
     @CheckForNull
     BlobStore getBlobStore();
 
+    StatisticsProvider getStatisticsProvider();
+
 }

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/console/SegmentTarFixture.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/console/SegmentTarFixture.java?rev=1795885&r1=1795884&r2=1795885&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/console/SegmentTarFixture.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/console/SegmentTarFixture.java Tue May 23 09:39:37 2017
@@ -31,6 +31,7 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.file.ReadOnlyFileStore;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.stats.StatisticsProvider;
 
 class SegmentTarFixture implements NodeStoreFixture {
 
@@ -77,6 +78,11 @@ class SegmentTarFixture implements NodeS
     }
 
     @Override
+    public StatisticsProvider getStatisticsProvider() {
+        return StatisticsProvider.NOOP;
+    }
+
+    @Override
     public void close() throws IOException {
         fileStore.close();
     }

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/CommonOptions.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/CommonOptions.java?rev=1795885&r1=1795884&r2=1795885&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/CommonOptions.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/CommonOptions.java Tue May 23 09:39:37 2017
@@ -34,11 +34,13 @@ public class CommonOptions implements Op
     private final OptionSpec<Void> help;
     private final OptionSpec<Void> readWriteOption;
     private final OptionSpec<String> nonOption;
+    private final OptionSpec<Void> metrics;
     private OptionSet options;
 
     public CommonOptions(OptionParser parser){
         help = parser.acceptsAll(asList("h", "?", "help"), "show help").forHelp();
         readWriteOption = parser.accepts("read-write", "connect to repository in read-write mode");
+        metrics = parser.accepts("metrics", "Enables Metrics based statistics collection");
         nonOption = parser.nonOptions(DEFAULT_CONNECTION_STRING);
     }
 
@@ -71,6 +73,10 @@ public class CommonOptions implements Op
         return !isMongo() && !isRDB();
     }
 
+    public boolean isMetricsEnabled() {
+        return options.has(metrics);
+    }
+
     public String getStoreArg() {
         List<String> nonOptions = nonOption.values(options);
         return nonOptions.size() > 0 ? nonOptions.get(0) : "";

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/NodeStoreFixtureProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/NodeStoreFixtureProvider.java?rev=1795885&r1=1795884&r2=1795885&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/NodeStoreFixtureProvider.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/cli/NodeStoreFixtureProvider.java Tue May 23 09:39:37 2017
@@ -23,16 +23,20 @@ import java.io.Closeable;
 import java.io.File;
 import java.io.IOException;
 import java.net.UnknownHostException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
 
 import javax.sql.DataSource;
 
 import com.google.common.io.Closer;
 import com.mongodb.MongoClientURI;
+import org.apache.jackrabbit.oak.commons.concurrent.ExecutorCloser;
 import org.apache.jackrabbit.oak.console.BlobStoreFixture;
 import org.apache.jackrabbit.oak.console.NodeStoreFixture;
 import org.apache.jackrabbit.oak.plugins.document.DocumentMK;
 import org.apache.jackrabbit.oak.plugins.document.rdb.RDBDataSourceFactory;
 import org.apache.jackrabbit.oak.plugins.document.util.MongoConnection;
+import org.apache.jackrabbit.oak.plugins.metric.MetricStatisticsProvider;
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
@@ -40,7 +44,9 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.file.ReadOnlyFileStore;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.stats.StatisticsProvider;
 
+import static java.lang.management.ManagementFactory.getPlatformMBeanServer;
 import static org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder;
 
 public class NodeStoreFixtureProvider {
@@ -61,19 +67,21 @@ public class NodeStoreFixtureProvider {
             closer.register(blobFixture);
         }
 
+        StatisticsProvider statisticsProvider = createStatsProvider(options, closer);
         NodeStore store = null;
         if (commonOpts.isMongo() || commonOpts.isRDB()) {
-            store = configureDocumentMk(options, blobStore, closer, readOnly);
+            store = configureDocumentMk(options, blobStore, statisticsProvider, closer, readOnly);
         } else {
-            store = configureSegment(options, blobStore, closer, readOnly);
+            store = configureSegment(options, blobStore, statisticsProvider, closer, readOnly);
         }
 
-        return new SimpleNodeStoreFixture(store, blobStore, closer);
+        return new SimpleNodeStoreFixture(store, blobStore, statisticsProvider, closer);
     }
 
-
     private static NodeStore configureDocumentMk(Options options,
-                                                 BlobStore blobStore, Closer closer,
+                                                 BlobStore blobStore,
+                                                 StatisticsProvider statisticsProvider,
+                                                 Closer closer,
                                                  boolean readOnly) throws UnknownHostException {
         DocumentMK.Builder builder = new DocumentMK.Builder();
 
@@ -84,7 +92,7 @@ public class NodeStoreFixtureProvider {
         DocumentNodeStoreOptions docStoreOpts = options.getOptionBean(DocumentNodeStoreOptions.class);
 
         builder.setClusterId(docStoreOpts.getClusterId());
-
+        builder.setStatisticsProvider(statisticsProvider);
         if (readOnly) {
             builder.setReadOnlyMode();
         }
@@ -120,7 +128,7 @@ public class NodeStoreFixtureProvider {
         return builder.getNodeStore();
     }
 
-    private static NodeStore configureSegment(Options options, BlobStore blobStore, Closer closer, boolean readOnly)
+    private static NodeStore configureSegment(Options options, BlobStore blobStore, StatisticsProvider statisticsProvider, Closer closer, boolean readOnly)
             throws IOException, InvalidFileStoreVersionException {
 
         String path = options.getOptionBean(CommonOptions.class).getStoreArg();
@@ -132,11 +140,15 @@ public class NodeStoreFixtureProvider {
 
         NodeStore nodeStore;
         if (readOnly) {
-            ReadOnlyFileStore fileStore = builder.buildReadOnly();
+            ReadOnlyFileStore fileStore = builder
+                    .withStatisticsProvider(statisticsProvider)
+                    .buildReadOnly();
             closer.register(fileStore);
             nodeStore = SegmentNodeStoreBuilders.builder(fileStore).build();
         } else {
-            FileStore fileStore = builder.build();
+            FileStore fileStore = builder
+                    .withStatisticsProvider(statisticsProvider)
+                    .build();
             closer.register(fileStore);
             nodeStore = SegmentNodeStoreBuilders.builder(fileStore).build();
         }
@@ -144,6 +156,17 @@ public class NodeStoreFixtureProvider {
         return nodeStore;
     }
 
+    private static StatisticsProvider createStatsProvider(Options options, Closer closer) {
+        if (options.getCommonOpts().isMetricsEnabled()) {
+            ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
+            closer.register(new ExecutorCloser(executorService));
+            MetricStatisticsProvider statsProvider = new MetricStatisticsProvider(getPlatformMBeanServer(), executorService);
+            closer.register(statsProvider);
+            return statsProvider;
+        }
+        return StatisticsProvider.NOOP;
+    }
+
     private static Closeable asCloseable(final MongoConnection con) {
         return new Closeable() {
             @Override
@@ -157,9 +180,12 @@ public class NodeStoreFixtureProvider {
         private final Closer closer;
         private final NodeStore nodeStore;
         private final BlobStore blobStore;
+        private final StatisticsProvider statisticsProvider;
 
-        private SimpleNodeStoreFixture(NodeStore nodeStore, BlobStore blobStore, Closer closer) {
+        private SimpleNodeStoreFixture(NodeStore nodeStore, BlobStore blobStore,
+                                       StatisticsProvider statisticsProvider, Closer closer) {
             this.blobStore = blobStore;
+            this.statisticsProvider = statisticsProvider;
             this.closer = closer;
             this.nodeStore = nodeStore;
         }
@@ -175,6 +201,11 @@ public class NodeStoreFixtureProvider {
         }
 
         @Override
+        public StatisticsProvider getStatisticsProvider() {
+            return statisticsProvider;
+        }
+
+        @Override
         public void close() throws IOException {
             closer.close();
         }

Modified: jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/JsonIndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/JsonIndexTest.java?rev=1795885&r1=1795884&r2=1795885&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/JsonIndexTest.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/JsonIndexTest.java Tue May 23 09:39:37 2017
@@ -29,6 +29,7 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.memory.MemoryStore;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.stats.StatisticsProvider;
 import org.junit.Test;
 
 public class JsonIndexTest {
@@ -103,6 +104,10 @@ public class JsonIndexTest {
                 return null;
             }
 
+            @Override
+            public StatisticsProvider getStatisticsProvider() {
+                return null;
+            }
         };
     }