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/05 10:21:45 UTC

svn commit: r1772622 - 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: Mon Dec  5 10:21:45 2016
New Revision: 1772622

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

Added:
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/MultiplexingFixture.java
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/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=1772622&r1=1772621&r2=1772622&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 Mon Dec  5 10:21:45 2016
@@ -156,6 +156,8 @@ 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.")
+                .withOptionalArg().ofType(Integer.class).defaultsTo(1000);
         OptionSpec<String> nonOption = parser.nonOptions();
         OptionSpec help = parser.acceptsAll(asList("h", "?", "help"), "show help").forHelp();
         OptionSet options = parser.parse(args);
@@ -198,11 +200,13 @@ 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),
                 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)),
+                OakRepositoryFixture.getMultiplexing(base.value(options), 256, cacheSize,
+                        mmap.value(options), numberOfMounts.value(options))};
 
         Benchmark[] allBenchmarks = new Benchmark[] {
             new OrderedIndexQueryOrderedIndexTest(),

Added: 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=1772622&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/MultiplexingFixture.java (added)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/fixture/MultiplexingFixture.java Mon Dec  5 10:21:45 2016
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jackrabbit.oak.fixture;
+
+import org.apache.jackrabbit.oak.Oak;
+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.stats.StatisticsProvider;
+
+import java.io.File;
+
+import static org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder;
+
+class MultiplexingFixture extends OakFixture {
+
+    private final File base;
+
+    private final int maxFileSizeMB;
+
+    private final int cacheSizeMB;
+
+    private final boolean memoryMapping;
+
+    private final int mounts;
+
+    private FileStore fileStore;
+
+    public MultiplexingFixture(String name, File base, int maxFileSizeMB, int cacheSizeMB,
+                               boolean memoryMapping, int mounts) {
+        super(name);
+        this.base = base;
+        this.maxFileSizeMB = maxFileSizeMB;
+        this.cacheSizeMB = cacheSizeMB;
+        this.memoryMapping = memoryMapping;
+        this.mounts = mounts;
+    }
+
+    @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();
+        SimpleMountInfoProvider.Builder mip = new SimpleMountInfoProvider.Builder();
+        for (int i = 0; i < mounts; i++) {
+            mip.readOnlyMount("mount" + i, "/path/" + i);
+        }
+        MultiplexingNodeStore.Builder builder = new MultiplexingNodeStore.Builder(mip.build(), nodeStore);
+        for (int i = 0; i < mounts; i++) {
+            builder.addMount("mount" + i, nodeStore);
+        }
+        return new Oak(builder.build());
+    }
+
+    @Override
+    public Oak[] setUpCluster(int n, StatisticsProvider statsProvider) throws Exception {
+        if (n != 1) {
+            throw new IllegalArgumentException();
+        }
+        return new Oak[] { getOak(1) };
+    }
+
+    @Override
+    public void tearDownCluster() {
+        if (fileStore != null) {
+            fileStore.close();
+        }
+    }
+}

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=1772622&r1=1772621&r2=1772622&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 Mon Dec  5 10:21:45 2016
@@ -59,6 +59,7 @@ 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";
 
 
     private final String name;
@@ -284,6 +285,12 @@ public abstract class OakFixture {
         return new SegmentTarFixture(name, base, maxFileSizeMB, cacheSizeMB, memoryMapping, useBlobStore, dsCacheInMB);
     }
 
+    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);
+    }
+
     public static class MongoFixture extends OakFixture {
 
         private final String uri;

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=1772622&r1=1772621&r2=1772622&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 Mon Dec  5 10:21:45 2016
@@ -123,6 +123,12 @@ public class OakRepositoryFixture implem
                 memoryMapping, true, dsCacheInMB));
     }
 
+    public static RepositoryFixture getMultiplexing(File base, int maxFileSizeMB, int cacheSizeMB,
+                                                    boolean memoryMapping, int mounts) {
+        return new OakRepositoryFixture(OakFixture.getMultiplexing(OakFixture.OAK_MULTIPLEXING,
+                base, maxFileSizeMB, cacheSizeMB, memoryMapping, mounts));
+    }
+
     private final OakFixture oakFixture;
     private StatisticsProvider statisticsProvider = StatisticsProvider.NOOP;
     private Repository[] cluster;