Author: reschke
Date: Thu Oct 5 14:39:37 2017
New Revision: 1811212
URL: http://svn.apache.org/viewvc?rev=1811212&view=rev
Log:
OAK-6719: add ability to run benchmarks with continuous version GC enabled (RDB
fixtures)
Modified:
jackrabbit/oak/trunk/oak-benchmarks/README.md
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityRunner.java
jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/OakFixture.java
jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ServerCommand.java
Modified: jackrabbit/oak/trunk/oak-benchmarks/README.md
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/README.md?rev=1811212&r1=1811211&r2=1811212&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-benchmarks/README.md (original)
+++ jackrabbit/oak/trunk/oak-benchmarks/README.md Thu Oct 5 14:39:37 2017
@@ -39,6 +39,7 @@ The following benchmark options (with de
--rdbjdbcuser - JDBC username (defaults to "")
--rdbjdbcpasswd - JDBC password (defaults to "")
--rdbjdbctableprefix - for RDB persistence: prefix for table names
(defaults to "")
+ --vgcMaxAge - Continuous DocumentNodeStore VersionGC max age in
sec (RDB only)
These options are passed to the test cases and repository fixtures
that need them. For example the Wikipedia dump option is needed by the
Modified:
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java?rev=1811212&r1=1811211&r2=1811212&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
(original)
+++
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
Thu Oct 5 14:39:37 2017
@@ -164,6 +164,8 @@ public class BenchmarkRunner {
.withOptionalArg().ofType(Integer.class).defaultsTo(2);
OptionSpec<Integer> pathsPerMount = parser.accepts("pathsPerMount",
"Number of paths per one mount.")
.withOptionalArg().ofType(Integer.class).defaultsTo(1000);
+ OptionSpec<Integer> vgcMaxAge = parser.accepts("vgcMaxAge",
"Continuous DocumentNodeStore VersionGC max age in sec (RDB only)")
+ .withRequiredArg().ofType(Integer.class).defaultsTo(-1);
OptionSpec<?> verbose = parser.accepts("verbose", "Enable verbose
output");
OptionSpec<String> nonOption = parser.nonOptions();
OptionSpec help = parser.acceptsAll(asList("h", "?", "help"), "show
help").forHelp();
@@ -203,11 +205,11 @@ public class BenchmarkRunner {
mmap.value(options), fdsCache.value(options)),
OakRepositoryFixture.getRDB(rdbjdbcuri.value(options),
rdbjdbcuser.value(options),
rdbjdbcpasswd.value(options),
rdbjdbctableprefix.value(options),
- dropDBAfterTest.value(options), cacheSize * MB),
+ dropDBAfterTest.value(options), cacheSize * MB,
vgcMaxAge.value(options)),
OakRepositoryFixture.getRDBWithDS(rdbjdbcuri.value(options),
rdbjdbcuser.value(options),
rdbjdbcpasswd.value(options),
rdbjdbctableprefix.value(options),
dropDBAfterTest.value(options), cacheSize * MB,
base.value(options),
- fdsCache.value(options)),
+ fdsCache.value(options), vgcMaxAge.value(options)),
OakRepositoryFixture.getCompositeStore(base.value(options),
256, cacheSize,
mmap.value(options), mounts.value(options),
pathsPerMount.value(options)),
OakRepositoryFixture.getCompositeMemoryStore(mounts.value(options),
pathsPerMount.value(options))
Modified:
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityRunner.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityRunner.java?rev=1811212&r1=1811211&r2=1811212&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityRunner.java
(original)
+++
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityRunner.java
Thu Oct 5 14:39:37 2017
@@ -147,11 +147,11 @@ public class ScalabilityRunner {
mmap.value(options), fdsCache.value(options)),
OakRepositoryFixture.getRDB(rdbjdbcuri.value(options),
rdbjdbcuser.value(options),
rdbjdbcpasswd.value(options),
rdbjdbctableprefix.value(options),
- dropDBAfterTest.value(options), cacheSize * MB),
+ dropDBAfterTest.value(options), cacheSize * MB, -1),
OakRepositoryFixture.getRDBWithDS(rdbjdbcuri.value(options),
rdbjdbcuser.value(options),
rdbjdbcpasswd.value(options),
rdbjdbctableprefix.value(options),
dropDBAfterTest.value(options), cacheSize * MB,
base.value(options),
- fdsCache.value(options))
+ fdsCache.value(options), -1)
};
ScalabilitySuite[] allSuites =
new ScalabilitySuite[] {
Modified:
jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/OakFixture.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/OakFixture.java?rev=1811212&r1=1811211&r2=1811212&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/OakFixture.java
(original)
+++
jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/OakFixture.java
Thu Oct 5 14:39:37 2017
@@ -19,11 +19,15 @@ package org.apache.jackrabbit.oak.fixtur
import java.io.File;
import java.lang.management.ManagementFactory;
import java.net.UnknownHostException;
+import java.util.concurrent.TimeUnit;
import javax.sql.DataSource;
import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.plugins.document.DocumentMK;
+import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
+import org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector;
+import
org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector.VersionGCStats;
import org.apache.jackrabbit.oak.plugins.document.rdb.RDBBlobStore;
import org.apache.jackrabbit.oak.plugins.document.rdb.RDBDataSourceFactory;
import org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentStore;
@@ -33,6 +37,8 @@ import org.apache.jackrabbit.oak.plugins
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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public abstract class OakFixture {
@@ -157,15 +163,16 @@ public abstract class OakFixture {
}
public static OakFixture getRDB(final String name, final String jdbcuri,
final String jdbcuser, final String jdbcpasswd,
- final String tablePrefix, final boolean dropDBAfterTest, final long
cacheSize) {
- return getRDB(name, jdbcuri, jdbcuser, jdbcpasswd, tablePrefix,
dropDBAfterTest, cacheSize, false, null, 0);
+ final String tablePrefix, final boolean dropDBAfterTest, final long
cacheSize, final int vgcMaxAge) {
+ return getRDB(name, jdbcuri, jdbcuser, jdbcpasswd, tablePrefix,
dropDBAfterTest, cacheSize, false, null, 0, vgcMaxAge);
}
public static OakFixture getRDB(final String name, final String jdbcuri,
final String jdbcuser, final String jdbcpasswd,
final String tablePrefix, final boolean
dropDBAfterTest, final long cacheSize,
- final boolean useDataStore, final File
base, final int dsCacheInMB) {
+ final boolean useDataStore, final File
base, final int dsCacheInMB, final int vgcMaxAge) {
return new OakFixture(name) {
private DocumentMK[] kernels;
+ private VersionGarbageCollectionJob versionGarbageCollectionJob =
null;
private BlobStoreFixture blobStoreFixture;
private RDBOptions getOptions(boolean dropDBAFterTest, String
tablePrefix) {
@@ -219,12 +226,21 @@ public abstract class OakFixture {
kernels[i] = mkBuilder.open();
cluster[i] = newOak(kernels[i].getNodeStore());
}
+ if (vgcMaxAge > 0 && kernels.length >= 1) {
+ versionGarbageCollectionJob = new
VersionGarbageCollectionJob(kernels[0].getNodeStore(), vgcMaxAge);
+ Thread t = new Thread(versionGarbageCollectionJob);
+ t.setDaemon(true);
+ t.start();
+ }
return cluster;
}
@Override
public void tearDownCluster() {
String dropped = "";
+ if (versionGarbageCollectionJob != null) {
+ versionGarbageCollectionJob.stop();
+ }
for (DocumentMK kernel : kernels) {
kernel.dispose();
if (kernel.getDocumentStore() instanceof RDBDocumentStore)
{
@@ -232,7 +248,7 @@ public abstract class OakFixture {
}
}
if (dropDBAfterTest) {
- if(blobStoreFixture != null){
+ if (blobStoreFixture != null) {
blobStoreFixture.tearDown();
}
@@ -250,6 +266,39 @@ public abstract class OakFixture {
};
}
+ private static class VersionGarbageCollectionJob implements Runnable {
+
+ private static final Logger LOG =
LoggerFactory.getLogger(OakFixture.class);
+ private boolean stopped = false;
+ final VersionGarbageCollector vgc;
+ final long maxAge;
+
+ public VersionGarbageCollectionJob(DocumentNodeStore dns, long maxAge)
{
+ this.vgc = dns.getVersionGarbageCollector();
+ this.maxAge = maxAge;
+ }
+
+ @Override
+ public void run() {
+ while(!stopped) {
+ try {
+ VersionGCStats stats = this.vgc.gc(maxAge,
TimeUnit.SECONDS);
+ LOG.debug("vgc: " + stats);
+ //
org.apache.jackrabbit.oak.plugins.document.NodeDocument.MODIFIED_IN_SECS_RESOLUTION
+ Thread.sleep(5 * 1000);
+ }
+ catch (Throwable ex) {
+ LOG.warn("While running GC", ex);
+ }
+ }
+ }
+
+ public void stop() {
+ this.vgc.cancel();
+ this.stopped = true;
+ }
+ }
+
public static OakFixture getSegmentTar(final String name, final File base,
final int maxFileSizeMB, final int cacheSizeMB, final boolean
memoryMapping,
final boolean useBlobStore) {
@@ -382,6 +431,6 @@ public abstract class OakFixture {
static Oak newOak(NodeStore nodeStore) {
return new
Oak(nodeStore).with(ManagementFactory.getPlatformMBeanServer());
- }
+ }
}
\ No newline at end of file
Modified:
jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java?rev=1811212&r1=1811211&r2=1811212&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java
(original)
+++
jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/OakRepositoryFixture.java
Thu Oct 5 14:39:37 2017
@@ -80,18 +80,18 @@ public class OakRepositoryFixture implem
}
public static RepositoryFixture getRDB(String jdbcuri, String jdbcuser,
String jdbcpasswd,
- String jdbctableprefix, boolean dropDBAfterTest, long cacheSize) {
+ String jdbctableprefix, boolean dropDBAfterTest, long cacheSize, int
vgcMaxAge) {
return new OakRepositoryFixture(OakFixture
.getRDB(OakFixture.OAK_RDB, jdbcuri, jdbcuser, jdbcpasswd,
jdbctableprefix,
- dropDBAfterTest, cacheSize));
+ dropDBAfterTest, cacheSize, vgcMaxAge));
}
public static RepositoryFixture getRDBWithDS(String jdbcuri, String
jdbcuser, String jdbcpasswd,
- String jdbctableprefix, boolean dropDBAfterTest, long cacheSize, final
File base,
- final int fdsCacheInMB) {
+ String jdbctableprefix, boolean dropDBAfterTest, long cacheSize, File
base,
+ int fdsCacheInMB, int vgcMaxAge) {
return new OakRepositoryFixture(OakFixture
.getRDB(OakFixture.OAK_RDB_DS, jdbcuri, jdbcuser, jdbcpasswd,
jdbctableprefix,
- dropDBAfterTest, cacheSize, true, base, fdsCacheInMB));
+ dropDBAfterTest, cacheSize, true, base, fdsCacheInMB,
vgcMaxAge));
}
public static RepositoryFixture getSegmentTar(File base, int
maxFileSizeMB, int cacheSizeMB,
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ServerCommand.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ServerCommand.java?rev=1811212&r1=1811211&r2=1811212&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ServerCommand.java
(original)
+++
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/ServerCommand.java
Thu Oct 5 14:39:37 2017
@@ -125,7 +125,7 @@ class ServerCommand implements Command {
oakFixture = OakFixture.getSegmentTar(OakFixture.OAK_SEGMENT_TAR,
baseFile, 256, cacheSize, mmap.value(options), false);
} else if (fix.equals(OakFixture.OAK_RDB)) {
oakFixture = OakFixture.getRDB(OakFixture.OAK_RDB,
rdbjdbcuri.value(options), rdbjdbcuser.value(options),
- rdbjdbcpasswd.value(options),
rdbjdbctableprefix.value(options), false, cacheSize);
+ rdbjdbcpasswd.value(options),
rdbjdbctableprefix.value(options), false, cacheSize, -1);
} else {
throw new IllegalArgumentException("Unsupported repository setup "
+ fix);
}