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 mr...@apache.org on 2018/09/17 07:56:46 UTC
svn commit: r1841051 - in /jackrabbit/oak/trunk:
oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/
oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/
Author: mreutegg
Date: Mon Sep 17 07:56:46 2018
New Revision: 1841051
URL: http://svn.apache.org/viewvc?rev=1841051&view=rev
Log:
OAK-7757: CompositeNodeStore fixture on MongoDB
Modified:
jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/CompositeStoreFixture.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
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=1841051&r1=1841050&r2=1841051&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 Mon Sep 17 07:56:46 2018
@@ -253,7 +253,9 @@ public class BenchmarkRunner {
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))
+ OakRepositoryFixture.getCompositeMemoryStore(mounts.value(options), pathsPerMount.value(options)),
+ OakRepositoryFixture.getCompositeMongoStore(uri, cacheSize * MB,
+ dropDBAfterTest.value(options), mounts.value(options), pathsPerMount.value(options))
};
Benchmark[] allBenchmarks = new Benchmark[] {
Modified: jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/CompositeStoreFixture.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/CompositeStoreFixture.java?rev=1841051&r1=1841050&r2=1841051&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/CompositeStoreFixture.java (original)
+++ jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/CompositeStoreFixture.java Mon Sep 17 07:56:46 2018
@@ -19,6 +19,8 @@ package org.apache.jackrabbit.oak.fixtur
import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.composite.CompositeNodeStore;
+import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
+import org.apache.jackrabbit.oak.plugins.document.util.MongoConnection;
import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
import org.apache.jackrabbit.oak.segment.file.FileStore;
@@ -31,48 +33,98 @@ import org.apache.jackrabbit.oak.stats.S
import java.io.File;
import java.io.IOException;
-import static org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder;
-
-class CompositeStoreFixture extends OakFixture {
-
- private final File base;
-
- private final int maxFileSizeMB;
+import com.mongodb.MongoClientURI;
- private final int cacheSizeMB;
+import static org.apache.jackrabbit.oak.plugins.document.mongo.MongoDocumentNodeStoreBuilder.newMongoDocumentNodeStoreBuilder;
+import static org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder;
- private final boolean memoryMapping;
+abstract class CompositeStoreFixture extends OakFixture {
private final int mounts;
private final int pathsPerMount;
- private final boolean inMemory;
-
- private FileStore fileStore;
-
- public CompositeStoreFixture(String name, int mounts, int pathsPerMount) {
+ private CompositeStoreFixture(String name, int mounts, int pathsPerMount) {
super(name);
- this.inMemory = true;
this.mounts = mounts;
this.pathsPerMount = pathsPerMount;
+ }
+
+ static OakFixture newCompositeMemoryFixture(String name, int mounts, int pathsPerMount) {
+ return new CompositeStoreFixture(name, mounts, pathsPerMount) {
+ @Override
+ protected NodeStore getNodeStore() {
+ return new MemoryNodeStore();
+ }
- this.base = null;
- this.maxFileSizeMB = -1;
- this.cacheSizeMB = -1;
- this.memoryMapping = false;
+ @Override
+ public void tearDownCluster() {
+ // nothing to do
+ }
+ };
}
- public CompositeStoreFixture(String name, File base, int maxFileSizeMB, int cacheSizeMB,
- boolean memoryMapping, int mounts, int pathsPerMount) {
- super(name);
- this.base = base;
- this.maxFileSizeMB = maxFileSizeMB;
- this.cacheSizeMB = cacheSizeMB;
- this.memoryMapping = memoryMapping;
- this.mounts = mounts;
- this.pathsPerMount = pathsPerMount;
- this.inMemory = false;
+ static OakFixture newCompositeSegmentFixture(String name, File base, int maxFileSizeMB, int cacheSizeMB,
+ boolean memoryMapping, int mounts, int pathsPerMount) {
+ return new CompositeStoreFixture(name, mounts, pathsPerMount) {
+
+ private FileStore fileStore;
+
+ @Override
+ protected NodeStore getNodeStore()
+ throws IOException, InvalidFileStoreVersionException {
+ FileStoreBuilder fsBuilder = fileStoreBuilder(new File(base, unique))
+ .withMaxFileSize(maxFileSizeMB)
+ .withSegmentCacheSize(cacheSizeMB)
+ .withMemoryMapping(memoryMapping);
+ fileStore = fsBuilder.build();
+ return SegmentNodeStoreBuilders.builder(fileStore).build();
+ }
+
+ @Override
+ public void tearDownCluster() {
+ if (fileStore != null) {
+ fileStore.close();
+ }
+ }
+ };
+ }
+
+ static OakFixture newCompositeMongoFixture(String name,
+ String uri,
+ boolean dropDBAfterTest,
+ long cacheSize,
+ int mounts,
+ int pathsPerMount) {
+ return new CompositeStoreFixture(name, mounts, pathsPerMount) {
+
+ private String database = new MongoClientURI(uri).getDatabase();
+ private DocumentNodeStore ns;
+
+ @Override
+ protected NodeStore getNodeStore() {
+ ns = newMongoDocumentNodeStoreBuilder()
+ .memoryCacheSize(cacheSize)
+ .setMongoDB(uri, database, 0)
+ .build();
+ return ns;
+ }
+
+ @Override
+ public void tearDownCluster() {
+ if (ns != null) {
+ ns.dispose();
+ }
+ if (dropDBAfterTest) {
+ MongoConnection c = new MongoConnection(uri);
+ try {
+ c.getDatabase(database).drop();
+ } finally {
+ c.close();
+ }
+ }
+ }
+ };
}
@Override
@@ -93,17 +145,7 @@ class CompositeStoreFixture extends OakF
return new Oak(builder.build());
}
- private NodeStore getNodeStore() throws IOException, InvalidFileStoreVersionException {
- if (inMemory) {
- return new MemoryNodeStore();
- }
- FileStoreBuilder fsBuilder = fileStoreBuilder(new File(base, unique))
- .withMaxFileSize(maxFileSizeMB)
- .withSegmentCacheSize(cacheSizeMB)
- .withMemoryMapping(memoryMapping);
- fileStore = fsBuilder.build();
- return SegmentNodeStoreBuilders.builder(fileStore).build();
- }
+ protected abstract NodeStore getNodeStore() throws IOException, InvalidFileStoreVersionException;
@Override
public Oak[] setUpCluster(int n, StatisticsProvider statsProvider) throws Exception {
@@ -112,11 +154,4 @@ class CompositeStoreFixture extends OakF
}
return new Oak[] { getOak(1) };
}
-
- @Override
- public void tearDownCluster() {
- if (fileStore != null) {
- fileStore.close();
- }
- }
}
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=1841051&r1=1841050&r2=1841051&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 Mon Sep 17 07:56:46 2018
@@ -18,7 +18,6 @@ package org.apache.jackrabbit.oak.fixtur
import java.io.File;
import java.lang.management.ManagementFactory;
-import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -52,6 +51,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static java.util.Collections.emptyList;
+import static org.apache.jackrabbit.oak.fixture.CompositeStoreFixture.newCompositeMemoryFixture;
+import static org.apache.jackrabbit.oak.fixture.CompositeStoreFixture.newCompositeMongoFixture;
+import static org.apache.jackrabbit.oak.fixture.CompositeStoreFixture.newCompositeSegmentFixture;
import static org.apache.jackrabbit.oak.plugins.document.rdb.RDBDocumentNodeStoreBuilder.newRDBDocumentNodeStoreBuilder;
public abstract class OakFixture {
@@ -73,6 +75,7 @@ public abstract class OakFixture {
public static final String OAK_COMPOSITE_STORE = "Oak-Composite-Store";
public static final String OAK_COMPOSITE_MEMORY_STORE = "Oak-Composite-Memory-Store";
+ public static final String OAK_COMPOSITE_MONGO_STORE = "Oak-Composite-Mongo-Store";
private final String name;
@@ -362,13 +365,23 @@ public abstract class OakFixture {
public static OakFixture getCompositeStore(final String name, final File base,
final int maxFileSizeMB, final int cacheSizeMB, final boolean memoryMapping,
final int mounts, final int pathsPerMount) {
- return new CompositeStoreFixture(name, base, maxFileSizeMB, cacheSizeMB, memoryMapping, mounts, pathsPerMount);
+ return newCompositeSegmentFixture(name, base, maxFileSizeMB, cacheSizeMB, memoryMapping, mounts, pathsPerMount);
}
public static OakFixture getCompositeMemoryStore(final String name, final int mounts, final int pathsPerMount) {
- return new CompositeStoreFixture(name, mounts, pathsPerMount);
+ return newCompositeMemoryFixture(name, mounts, pathsPerMount);
}
+ public static OakFixture getCompositeMongoStore(String name,
+ String uri,
+ long cacheSize,
+ boolean dropDBAfterTest,
+ int mounts,
+ int pathsPerMount) {
+ return newCompositeMongoFixture(name, uri, dropDBAfterTest, cacheSize, mounts, pathsPerMount);
+ }
+
+
public static class MongoFixture extends OakFixture {
private final String uri;
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=1841051&r1=1841050&r2=1841051&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 Mon Sep 17 07:56:46 2018
@@ -131,6 +131,15 @@ public class OakRepositoryFixture implem
return new OakRepositoryFixture(OakFixture.getCompositeMemoryStore(OakFixture.OAK_COMPOSITE_MEMORY_STORE, mounts, pathsPerMount));
}
+ public static RepositoryFixture getCompositeMongoStore(String uri, long cacheSize, boolean dropDBAfterTest,
+ int mounts, int pathsPerMount) {
+ return new OakRepositoryFixture(OakFixture.getCompositeMongoStore(
+ OakFixture.OAK_COMPOSITE_MONGO_STORE,
+ uri, cacheSize, dropDBAfterTest,
+ mounts, pathsPerMount)
+ );
+ }
+
private final OakFixture oakFixture;
private StatisticsProvider statisticsProvider = StatisticsProvider.NOOP;
private Repository[] cluster;