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;