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/07 06:29:47 UTC
svn commit: r1759546 - in /jackrabbit/oak/trunk/oak-run: ./
src/main/java/org/apache/jackrabbit/oak/benchmark/
src/main/java/org/apache/jackrabbit/oak/fixture/
Author: chetanm
Date: Wed Sep 7 06:29:47 2016
New Revision: 1759546
URL: http://svn.apache.org/viewvc?rev=1759546&view=rev
Log:
OAK-4768 - Provide an option to enable Metrics collection for benchmark run
Metrics can be enabled via new '--metrics=true' arg and the report would be added to console
Modified:
jackrabbit/oak/trunk/oak-run/README.md
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakFixture.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java
Modified: jackrabbit/oak/trunk/oak-run/README.md
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/README.md?rev=1759546&r1=1759545&r2=1759546&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/README.md (original)
+++ jackrabbit/oak/trunk/oak-run/README.md Wed Sep 7 06:29:47 2016
@@ -453,6 +453,7 @@ The following benchmark options (with de
--report false - Whether to output intermediate results
--csvFile <file> - Optional csv file to report the benchmark results
--concurrency <levels> - Comma separated list of concurrency levels
+ --metrics false - Enable metrics based stats collection
--rdbjdbcuri - JDBC URL for RDB persistence (defaults to local file-based H2)
--rdbjdbcuser - JDBC username (defaults to "")
--rdbjdbcpasswd - JDBC password (defaults to "")
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java?rev=1759546&r1=1759545&r2=1759546&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java Wed Sep 7 06:29:47 2016
@@ -16,8 +16,6 @@
*/
package org.apache.jackrabbit.oak.benchmark;
-import static java.util.Arrays.asList;
-
import java.io.File;
import java.io.PrintStream;
import java.util.ArrayList;
@@ -25,9 +23,18 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Set;
-
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+
+import com.codahale.metrics.ConsoleReporter;
+import com.codahale.metrics.Counting;
+import com.codahale.metrics.Metric;
+import com.codahale.metrics.MetricFilter;
+import com.codahale.metrics.MetricRegistry;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
+import com.google.common.util.concurrent.MoreExecutors;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import joptsimple.OptionSpec;
@@ -40,7 +47,11 @@ import org.apache.jackrabbit.oak.fixture
import org.apache.jackrabbit.oak.fixture.OakFixture;
import org.apache.jackrabbit.oak.fixture.OakRepositoryFixture;
import org.apache.jackrabbit.oak.fixture.RepositoryFixture;
+import org.apache.jackrabbit.oak.plugins.metric.MetricStatisticsProvider;
import org.apache.jackrabbit.oak.spi.xml.ImportBehavior;
+import org.apache.jackrabbit.oak.stats.StatisticsProvider;
+
+import static java.util.Arrays.asList;
public class BenchmarkRunner {
@@ -83,6 +94,10 @@ public class BenchmarkRunner {
.accepts("luceneIndexOnFS", "Store Lucene index on file system")
.withOptionalArg()
.ofType(Boolean.class).defaultsTo(false);
+ OptionSpec<Boolean> metrics = parser
+ .accepts("metrics", "Enable Metrics collection")
+ .withOptionalArg()
+ .ofType(Boolean.class).defaultsTo(false);
OptionSpec<Boolean> withStorage = parser
.accepts("storage", "Index storage enabled").withOptionalArg()
.ofType(Boolean.class);
@@ -152,6 +167,7 @@ public class BenchmarkRunner {
}
uri = "mongodb://" + host.value(options) + ":" + port.value(options) + "/" + db;
}
+ StatisticsProvider statsProvider = options.has(metrics) ? getStatsProvider() : StatisticsProvider.NOOP;
int cacheSize = cache.value(options);
RepositoryFixture[] allFixtures = new RepositoryFixture[] {
new JackrabbitRepositoryFixture(base.value(options), cacheSize),
@@ -179,6 +195,7 @@ public class BenchmarkRunner {
rdbjdbcpasswd.value(options), rdbjdbctableprefix.value(options),
dropDBAfterTest.value(options), cacheSize * MB, base.value(options),
fdsCache.value(options));
+
Benchmark[] allBenchmarks = new Benchmark[] {
new OrderedIndexQueryOrderedIndexTest(),
new OrderedIndexQueryStandardIndexTest(),
@@ -403,6 +420,7 @@ public class BenchmarkRunner {
for (RepositoryFixture fixture : allFixtures) {
if (argset.remove(fixture.toString())) {
fixtures.add(fixture);
+ configure(fixture, statsProvider);
}
}
@@ -437,11 +455,38 @@ public class BenchmarkRunner {
if (out != null) {
out.close();
}
+ reportMetrics(statsProvider);
} else {
System.err.println("Unknown arguments: " + argset);
}
}
+ private static void reportMetrics(StatisticsProvider statsProvider) {
+ if (statsProvider instanceof MetricStatisticsProvider) {
+ MetricRegistry metricRegistry = ((MetricStatisticsProvider) statsProvider).getRegistry();
+ ConsoleReporter.forRegistry(metricRegistry)
+ .outputTo(System.out)
+ .filter(new MetricFilter() {
+ @Override
+ public boolean matches(String name, Metric metric) {
+ if (metric instanceof Counting) {
+ //Only report non zero metrics
+ return ((Counting) metric).getCount() > 0;
+ }
+ return true;
+ }
+ })
+ .build()
+ .report();
+ }
+ }
+
+ private static void configure(RepositoryFixture fixture, StatisticsProvider statsProvider) {
+ if (fixture instanceof OakRepositoryFixture) {
+ ((OakRepositoryFixture) fixture).setStatisticsProvider(statsProvider);
+ }
+ }
+
private static String asSortedString(List<?> in) {
List<String> tmp = new ArrayList<String>();
for (Object o : in) {
@@ -450,4 +495,10 @@ public class BenchmarkRunner {
Collections.sort(tmp);
return tmp.toString();
}
+
+ private static MetricStatisticsProvider getStatsProvider(){
+ ScheduledExecutorService executorService = MoreExecutors.getExitingScheduledExecutorService(
+ (ScheduledThreadPoolExecutor) Executors.newScheduledThreadPool(1));
+ return new MetricStatisticsProvider(null, executorService);
+ }
}
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakFixture.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakFixture.java?rev=1759546&r1=1759545&r2=1759546&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakFixture.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakFixture.java Wed Sep 7 06:29:47 2016
@@ -36,6 +36,7 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
import org.apache.jackrabbit.oak.spi.blob.BlobStore;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.stats.StatisticsProvider;
public abstract class OakFixture {
@@ -71,7 +72,7 @@ public abstract class OakFixture {
public abstract Oak getOak(int clusterId) throws Exception;
- public abstract Oak[] setUpCluster(int n) throws Exception;
+ public abstract Oak[] setUpCluster(int n, StatisticsProvider statsProvider) throws Exception;
public abstract void tearDownCluster();
@@ -99,7 +100,7 @@ public abstract class OakFixture {
}
@Override
- public Oak[] setUpCluster(int n) throws Exception {
+ public Oak[] setUpCluster(int n, StatisticsProvider statsProvider) throws Exception {
Oak[] cluster = new Oak[n];
for (int i = 0; i < cluster.length; i++) {
Oak oak;
@@ -175,6 +176,7 @@ public abstract class OakFixture {
DocumentMK.Builder mkBuilder = new DocumentMK.Builder().
setMongoDB(mongo.getDB()).
memoryCacheSize(cacheSize).
+ //TODO Persistent cache should be removed in teardown
setPersistentCache("target/persistentCache,time").
setClusterId(clusterId).
setLogging(false);
@@ -184,12 +186,13 @@ public abstract class OakFixture {
}
@Override
- public Oak[] setUpCluster(int n) throws Exception {
+ public Oak[] setUpCluster(int n, StatisticsProvider statsProvider) throws Exception {
Oak[] cluster = new Oak[n];
kernels = new DocumentMK[cluster.length];
for (int i = 0; i < cluster.length; i++) {
MongoConnection mongo = new MongoConnection(uri);
DocumentMK.Builder mkBuilder = new DocumentMK.Builder().
+ setStatisticsProvider(statsProvider).
setMongoDB(mongo.getDB()).
memoryCacheSize(cacheSize).
setPersistentCache("target/persistentCache,time").
@@ -280,13 +283,14 @@ public abstract class OakFixture {
}
@Override
- public Oak[] setUpCluster(int n) throws Exception {
+ public Oak[] setUpCluster(int n, StatisticsProvider statsProvider) throws Exception {
Oak[] cluster = new Oak[n];
kernels = new DocumentMK[cluster.length];
for (int i = 0; i < cluster.length; i++) {
BlobStore blobStore = getBlobStore();
DataSource ds = RDBDataSourceFactory.forJdbcUrl(jdbcuri, jdbcuser, jdbcpasswd);
DocumentMK.Builder mkBuilder = new DocumentMK.Builder()
+ .setStatisticsProvider(statsProvider)
.setRDBConnection(ds, getOptions(dropDBAfterTest, tablePrefix)).memoryCacheSize(cacheSize)
// FIXME: OAK-3389
.setLeaseCheck(false)
@@ -362,7 +366,7 @@ public abstract class OakFixture {
}
@Override
- public Oak[] setUpCluster(int n) throws Exception {
+ public Oak[] setUpCluster(int n, StatisticsProvider statsProvider) throws Exception {
Oak[] cluster = new Oak[n];
stores = new FileStore[cluster.length];
if (useBlobStore) {
@@ -381,6 +385,7 @@ public abstract class OakFixture {
builder.withBlobStore(blobStore);
}
stores[i] = builder.withRoot(EmptyNodeState.EMPTY_NODE)
+ .withStatisticsProvider(statsProvider)
.withMaxFileSize(maxFileSizeMB)
.withCacheSize(cacheSizeMB)
.withMemoryMapping(memoryMapping)
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java?rev=1759546&r1=1759545&r2=1759546&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java Wed Sep 7 06:29:47 2016
@@ -17,11 +17,13 @@
package org.apache.jackrabbit.oak.fixture;
import java.io.File;
+import java.util.Collections;
import javax.jcr.Repository;
import org.apache.jackrabbit.api.JackrabbitRepository;
import org.apache.jackrabbit.oak.Oak;
+import org.apache.jackrabbit.oak.stats.StatisticsProvider;
public class OakRepositoryFixture implements RepositoryFixture {
@@ -106,6 +108,7 @@ public class OakRepositoryFixture implem
}
private final OakFixture oakFixture;
+ private StatisticsProvider statisticsProvider = StatisticsProvider.NOOP;
private Repository[] cluster;
protected OakRepositoryFixture(OakFixture oakFixture) {
@@ -123,9 +126,10 @@ public class OakRepositoryFixture implem
}
public Repository[] setUpCluster(int n, JcrCreator customizer) throws Exception {
- Oak[] oaks = oakFixture.setUpCluster(n);
+ Oak[] oaks = oakFixture.setUpCluster(n, statisticsProvider);
cluster = new Repository[oaks.length];
for (int i = 0; i < oaks.length; i++) {
+ configureStatsProvider(oaks[i]);
cluster[i] = customizer.customize(oaks[i]).createRepository();
}
return cluster;
@@ -156,4 +160,12 @@ public class OakRepositoryFixture implem
public OakFixture getOakFixture() {
return oakFixture;
}
+
+ public void setStatisticsProvider(StatisticsProvider statisticsProvider) {
+ this.statisticsProvider = statisticsProvider;
+ }
+
+ private void configureStatsProvider(Oak oak) {
+ oak.getWhiteboard().register(StatisticsProvider.class, statisticsProvider, Collections.emptyMap());
+ }
}
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java?rev=1759546&r1=1759545&r2=1759546&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/SegmentTarFixture.java Wed Sep 7 06:29:47 2016
@@ -27,6 +27,7 @@ import org.apache.jackrabbit.oak.segment
import org.apache.jackrabbit.oak.segment.file.FileStore;
import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
import org.apache.jackrabbit.oak.spi.blob.BlobStore;
+import org.apache.jackrabbit.oak.stats.StatisticsProvider;
class SegmentTarFixture extends OakFixture {
@@ -64,7 +65,7 @@ class SegmentTarFixture extends OakFixtu
}
@Override
- public Oak[] setUpCluster(int n) throws Exception {
+ public Oak[] setUpCluster(int n, StatisticsProvider statsProvider) throws Exception {
Oak[] cluster = new Oak[n];
stores = new FileStore[cluster.length];
if (useBlobStore) {
@@ -84,6 +85,7 @@ class SegmentTarFixture extends OakFixtu
}
stores[i] = builder
.withMaxFileSize(maxFileSizeMB)
+ .withStatisticsProvider(statsProvider)
.withSegmentCacheSize(cacheSizeMB)
.withMemoryMapping(memoryMapping)
.build();