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;