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;