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;