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 to...@apache.org on 2016/12/20 10:04:08 UTC

svn commit: r1775244 - in /jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak: benchmark/BenchmarkRunner.java fixture/MultiplexingFixture.java fixture/OakFixture.java fixture/OakRepositoryFixture.java

Author: tomekr
Date: Tue Dec 20 10:04:07 2016
New Revision: 1775244

URL: http://svn.apache.org/viewvc?rev=1775244&view=rev
Log:
OAK-5222: Optimize the multiplexing node store

-added Oak-Multiplexing-Memory fixture.
-added configurable pathsPerMount property.

Modified:
    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/MultiplexingFixture.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

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=1775244&r1=1775243&r2=1775244&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 Tue Dec 20 10:04:07 2016
@@ -156,7 +156,9 @@ public class BenchmarkRunner {
         OptionSpec<Boolean> transientWrites = parser.accepts("transient", "Do not save data.")
                 .withOptionalArg().ofType(Boolean.class)
                 .defaultsTo(Boolean.FALSE);
-        OptionSpec<Integer> numberOfMounts = parser.accepts("mounts", "Number of mounts for multiplexing node store.")
+        OptionSpec<Integer> mounts = parser.accepts("mounts", "Number of mounts for multiplexing node store.")
+                .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<String> nonOption = parser.nonOptions();
         OptionSpec help = parser.acceptsAll(asList("h", "?", "help"), "show help").forHelp();
@@ -206,7 +208,9 @@ public class BenchmarkRunner {
                         dropDBAfterTest.value(options), cacheSize * MB, base.value(options),
                         fdsCache.value(options)),
                 OakRepositoryFixture.getMultiplexing(base.value(options), 256, cacheSize,
-                        mmap.value(options), numberOfMounts.value(options))};
+                        mmap.value(options), mounts.value(options), pathsPerMount.value(options)),
+                OakRepositoryFixture.getMultiplexingInMemory(mounts.value(options), pathsPerMount.value(options))
+        };
 
         Benchmark[] allBenchmarks = new Benchmark[] {
             new OrderedIndexQueryOrderedIndexTest(),

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/MultiplexingFixture.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/MultiplexingFixture.java?rev=1775244&r1=1775243&r2=1775244&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/MultiplexingFixture.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/MultiplexingFixture.java Tue Dec 20 10:04:07 2016
@@ -17,16 +17,23 @@
 
 package org.apache.jackrabbit.oak.fixture;
 
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Range;
 import org.apache.jackrabbit.oak.Oak;
+import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
 import org.apache.jackrabbit.oak.plugins.multiplex.MultiplexingNodeStore;
 import org.apache.jackrabbit.oak.plugins.multiplex.SimpleMountInfoProvider;
-import org.apache.jackrabbit.oak.segment.SegmentNodeStore;
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
+import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
+import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.apache.jackrabbit.oak.stats.StatisticsProvider;
 
+import javax.annotation.Nullable;
 import java.io.File;
+import java.io.IOException;
 
 import static org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder;
 
@@ -42,37 +49,66 @@ class MultiplexingFixture extends OakFix
 
     private final int mounts;
 
+    private final int pathsPerMount;
+
+    private final boolean inMemory;
+
     private FileStore fileStore;
 
+    public MultiplexingFixture(String name, int mounts, int pathsPerMount) {
+        super(name);
+        this.inMemory = true;
+        this.mounts = mounts;
+        this.pathsPerMount = pathsPerMount;
+
+        this.base = null;
+        this.maxFileSizeMB = -1;
+        this.cacheSizeMB = -1;
+        this.memoryMapping = false;
+    }
+
     public MultiplexingFixture(String name, File base, int maxFileSizeMB, int cacheSizeMB,
-                               boolean memoryMapping, int mounts) {
+                               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;
     }
 
     @Override
     public Oak getOak(int clusterId) throws Exception {
-        FileStoreBuilder fsBuilder = fileStoreBuilder(new File(base, unique))
-                .withMaxFileSize(maxFileSizeMB)
-                .withSegmentCacheSize(cacheSizeMB)
-                .withMemoryMapping(memoryMapping);
-        fileStore = fsBuilder.build();
-        SegmentNodeStore nodeStore = SegmentNodeStoreBuilders.builder(fileStore).build();
+        NodeStore nodeStore = getNodeStore();
         SimpleMountInfoProvider.Builder mip = new SimpleMountInfoProvider.Builder();
         for (int i = 0; i < mounts; i++) {
-            mip.readOnlyMount("mount" + i, "/path/" + i);
+            String[] paths = new String[pathsPerMount];
+            for (int j = 0; j < pathsPerMount; j++) {
+                paths[j] = String.format("/mount-%d-path-%d", i, j);
+            }
+            mip.readOnlyMount("custom-mount-" + i, paths);
         }
         MultiplexingNodeStore.Builder builder = new MultiplexingNodeStore.Builder(mip.build(), nodeStore);
         for (int i = 0; i < mounts; i++) {
-            builder.addMount("mount" + i, nodeStore);
+            builder.addMount("custom-mount-" + i, nodeStore);
         }
         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();
+    }
+
     @Override
     public Oak[] setUpCluster(int n, StatisticsProvider statsProvider) throws Exception {
         if (n != 1) {

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=1775244&r1=1775243&r2=1775244&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 Tue Dec 20 10:04:07 2016
@@ -59,7 +59,9 @@ public abstract class OakFixture {
 
     public static final String OAK_SEGMENT_TAR = "Oak-Segment-Tar";
     public static final String OAK_SEGMENT_TAR_DS = "Oak-Segment-Tar-DS";
+
     public static final String OAK_MULTIPLEXING = "Oak-Multiplexing";
+    public static final String OAK_MULTIPLEXING_MEMORY = "Oak-Multiplexing-Memory";
 
 
     private final String name;
@@ -287,8 +289,12 @@ public abstract class OakFixture {
 
     public static OakFixture getMultiplexing(final String name, final File base,
                                              final int maxFileSizeMB, final int cacheSizeMB, final boolean memoryMapping,
-                                             final int mounts) {
-        return new MultiplexingFixture(name, base, maxFileSizeMB, cacheSizeMB, memoryMapping, mounts);
+                                             final int mounts, final int pathsPerMount) {
+        return new MultiplexingFixture(name, base, maxFileSizeMB, cacheSizeMB, memoryMapping, mounts, pathsPerMount);
+    }
+
+    public static OakFixture getMultiplexingInMemory(final String name, final int mounts, final int pathsPerMount) {
+        return new MultiplexingFixture(name, mounts, pathsPerMount);
     }
 
     public static class MongoFixture extends OakFixture {

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=1775244&r1=1775243&r2=1775244&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 Tue Dec 20 10:04:07 2016
@@ -124,9 +124,13 @@ public class OakRepositoryFixture implem
     }
 
     public static RepositoryFixture getMultiplexing(File base, int maxFileSizeMB, int cacheSizeMB,
-                                                    boolean memoryMapping, int mounts) {
+                                                    final boolean memoryMapping, int mounts, int pathsPerMount) {
         return new OakRepositoryFixture(OakFixture.getMultiplexing(OakFixture.OAK_MULTIPLEXING,
-                base, maxFileSizeMB, cacheSizeMB, memoryMapping, mounts));
+                base, maxFileSizeMB, cacheSizeMB, memoryMapping, mounts, pathsPerMount));
+    }
+
+    public static RepositoryFixture getMultiplexingInMemory(int mounts, int pathsPerMount) {
+        return new OakRepositoryFixture(OakFixture.getMultiplexingInMemory(OakFixture.OAK_MULTIPLEXING_MEMORY, mounts, pathsPerMount));
     }
 
     private final OakFixture oakFixture;