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;
+ }
};
}