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 ng...@apache.org on 2020/03/27 07:44:46 UTC
svn commit: r1875760 [4/5] - in /jackrabbit/oak/trunk: ./
oak-benchmarks-lucene/ oak-benchmarks-lucene/src/
oak-benchmarks-lucene/src/main/ oak-benchmarks-lucene/src/main/java/
oak-benchmarks-lucene/src/main/java/org/
oak-benchmarks-lucene/src/main/jav...
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=1875760&r1=1875759&r2=1875760&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 Fri Mar 27 07:44:43 2020
@@ -16,11 +16,8 @@
*/
package org.apache.jackrabbit.oak.benchmark;
-import static java.util.Arrays.asList;
-import static org.apache.jackrabbit.oak.benchmark.ReadDeepTreeTest.DEFAULT_ITEMS_TD_READ;
-import static org.apache.jackrabbit.oak.benchmark.ReadDeepTreeTest.DEFAULT_REPEATED_READ;
-import java.io.File;
+import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Arrays;
@@ -41,7 +38,6 @@ import com.google.common.collect.Sets;
import com.google.common.util.concurrent.MoreExecutors;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
-import joptsimple.OptionSpec;
import org.apache.commons.io.FileUtils;
import org.apache.jackrabbit.oak.benchmark.authentication.external.ExternalLoginTest;
import org.apache.jackrabbit.oak.benchmark.authentication.external.ListIdentitiesTest;
@@ -61,253 +57,122 @@ import org.apache.jackrabbit.oak.fixture
import org.apache.jackrabbit.oak.fixture.OakRepositoryFixture;
import org.apache.jackrabbit.oak.fixture.RepositoryFixture;
import org.apache.jackrabbit.oak.plugins.metric.MetricStatisticsProvider;
-import org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration;
-import org.apache.jackrabbit.oak.spi.xml.ImportBehavior;
import org.apache.jackrabbit.oak.stats.StatisticsProvider;
public class BenchmarkRunner {
private static final int MB = 1024 * 1024;
+ protected static List<Benchmark> allBenchmarks = Lists.newArrayList();
+ protected static StatisticsProvider statsProvider = null;
+
+ private static OptionParser parser = new OptionParser();
+ protected static BenchmarkOptions benchmarkOptions = null;
+ protected static OptionSet options;
+ private static boolean initFlag = false;
+
+
public static void main(String[] args) throws Exception {
- OptionParser parser = new OptionParser();
- OptionSpec<File> base = parser.accepts("base", "Base directory")
- .withRequiredArg().ofType(File.class)
- .defaultsTo(new File("target"));
- OptionSpec<String> host = parser.accepts("host", "MongoDB host")
- .withRequiredArg().defaultsTo("localhost");
- OptionSpec<Integer> port = parser.accepts("port", "MongoDB port")
- .withRequiredArg().ofType(Integer.class).defaultsTo(27017);
- OptionSpec<String> dbName = parser.accepts("db", "MongoDB database")
- .withRequiredArg();
- OptionSpec<String> mongouri = parser.accepts("mongouri", "MongoDB URI")
- .withRequiredArg();
- OptionSpec<Boolean> dropDBAfterTest = parser.accepts("dropDBAfterTest", "Whether to drop the MongoDB database after the test")
- .withOptionalArg().ofType(Boolean.class).defaultsTo(true);
- OptionSpec<String> rdbjdbcuri = parser.accepts("rdbjdbcuri", "RDB JDBC URI")
- .withOptionalArg().defaultsTo("jdbc:h2:target/benchmark");
- OptionSpec<String> rdbjdbcuser = parser.accepts("rdbjdbcuser", "RDB JDBC user")
- .withOptionalArg().defaultsTo("");
- OptionSpec<String> rdbjdbcpasswd = parser.accepts("rdbjdbcpasswd", "RDB JDBC password")
- .withOptionalArg().defaultsTo("");
- OptionSpec<String> rdbjdbctableprefix = parser.accepts("rdbjdbctableprefix", "RDB JDBC table prefix")
- .withOptionalArg().defaultsTo("");
-
- OptionSpec<String> azureConnectionString = parser.accepts("azure", "Azure Connection String")
- .withOptionalArg().defaultsTo("DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;");
- OptionSpec<String> azureContainerName = parser.accepts("azureContainerName", "Azure container name")
- .withOptionalArg().defaultsTo("oak");
- OptionSpec<String> azureRootPath = parser.accepts("azureRootPath", "Azure root path")
- .withOptionalArg().defaultsTo("/oak");
-
- OptionSpec<Boolean> mmap = parser.accepts("mmap", "TarMK memory mapping")
- .withOptionalArg().ofType(Boolean.class)
- .defaultsTo("64".equals(System.getProperty("sun.arch.data.model")));
- OptionSpec<Integer> cache = parser.accepts("cache", "cache size (MB)")
- .withRequiredArg().ofType(Integer.class).defaultsTo(100);
- OptionSpec<Integer> fdsCache = parser.accepts("blobCache", "cache size (MB)")
- .withRequiredArg().ofType(Integer.class).defaultsTo(32);
- OptionSpec<File> wikipedia = parser
- .accepts("wikipedia", "Wikipedia dump").withRequiredArg()
- .ofType(File.class);
- OptionSpec<Boolean> luceneIndexOnFS = parser
- .accepts("luceneIndexOnFS", "Store Lucene index on file system")
- .withOptionalArg()
- .ofType(Boolean.class).defaultsTo(false);
- OptionSpec<Boolean> metrics = parser
- .accepts("metrics", "Enable Metrics collection")
- .withOptionalArg()
- .ofType(Boolean.class).defaultsTo(false);
- OptionSpec<Boolean> withStorage = parser
- .accepts("storage", "Index storage enabled").withOptionalArg()
- .ofType(Boolean.class);
- OptionSpec<String> withServer = parser
- .accepts("server", "Solr server host").withOptionalArg()
- .ofType(String.class);
- OptionSpec<Boolean> runAsAdmin = parser.accepts("runAsAdmin", "Run test using admin session")
- .withRequiredArg().ofType(Boolean.class).defaultsTo(Boolean.FALSE);
- OptionSpec<String> runAsUser = parser.accepts("runAsUser", "Run test using admin, anonymous or a test user")
- .withOptionalArg().ofType(String.class).defaultsTo("admin");
- OptionSpec<Boolean> runWithToken = parser.accepts("runWithToken", "Run test using a login token vs. simplecredentials")
- .withOptionalArg().ofType(Boolean.class).defaultsTo(Boolean.FALSE);
- OptionSpec<Integer> noIterations = parser.accepts("noIterations", "Change default 'passwordHashIterations' parameter.")
- .withOptionalArg().ofType(Integer.class).defaultsTo(AbstractLoginTest.DEFAULT_ITERATIONS);
- OptionSpec<Long> expiration = parser.accepts("expiration", "Expiration time (e.g. principal cache.")
- .withOptionalArg().ofType(Long.class).defaultsTo(AbstractLoginTest.NO_CACHE);
- OptionSpec<Integer> numberOfGroups = parser.accepts("numberOfGroups", "Number of groups to create.")
- .withOptionalArg().ofType(Integer.class).defaultsTo(LoginWithMembershipTest.NUMBER_OF_GROUPS_DEFAULT);
- OptionSpec<Integer> queryMaxCount = parser.accepts("queryMaxCount", "Max number of query results.")
- .withOptionalArg().ofType(Integer.class).defaultsTo(Integer.MAX_VALUE);
- OptionSpec<Boolean> declaredMembership = parser.accepts("declaredMembership", "Only look for declared membership.")
- .withOptionalArg().ofType(Boolean.class).defaultsTo(true);
- OptionSpec<Integer> numberOfInitialAce = parser.accepts("numberOfInitialAce", "Number of ACE to create before running the test.")
- .withOptionalArg().ofType(Integer.class).defaultsTo(AceCreationTest.NUMBER_OF_INITIAL_ACE_DEFAULT);
- OptionSpec<Boolean> nestedGroups = parser.accepts("nestedGroups", "Use nested groups.")
- .withOptionalArg().ofType(Boolean.class).defaultsTo(false);
- OptionSpec<Boolean> entriesForEachPrincipal = parser.accepts("entriesForEachPrincipal", "Create ACEs for each principal (vs rotating).")
- .withOptionalArg().ofType(Boolean.class).defaultsTo(false);
- OptionSpec<String> compositionType = parser.accepts("compositionType", "Defines composition type for benchmarks with multiple authorization models.")
- .withOptionalArg().ofType(String.class)
- .defaultsTo(CompositeAuthorizationConfiguration.CompositionType.AND.name());
- OptionSpec<Boolean> useAggregationFilter = parser.accepts("useAggregationFilter", "Run principal-based tests with 'AggregationFilter'")
- .withOptionalArg().ofType(Boolean.class)
- .defaultsTo(Boolean.FALSE);
- OptionSpec<Integer> batchSize = parser.accepts("batchSize", "Batch size before persisting operations.")
- .withOptionalArg().ofType(Integer.class).defaultsTo(AddMembersTest.DEFAULT_BATCH_SIZE);
- OptionSpec<String> importBehavior = parser.accepts("importBehavior", "Protected Item Import Behavior")
- .withOptionalArg().ofType(String.class).defaultsTo(ImportBehavior.NAME_BESTEFFORT);
- OptionSpec<Integer> itemsToRead = parser.accepts("itemsToRead", "Number of items to read")
- .withRequiredArg().ofType(Integer.class).defaultsTo(DEFAULT_ITEMS_TD_READ);
- OptionSpec<Integer> repeatedRead = parser.accepts("repeatedRead", "Number of repetitions")
- .withRequiredArg().ofType(Integer.class).defaultsTo(DEFAULT_REPEATED_READ);
- OptionSpec<Integer> concurrency = parser.accepts("concurrency", "Number of test threads.")
- .withRequiredArg().ofType(Integer.class).withValuesSeparatedBy(',');
- OptionSpec<Boolean> report = parser.accepts("report", "Whether to output intermediate results")
- .withOptionalArg().ofType(Boolean.class)
- .defaultsTo(Boolean.FALSE);
- OptionSpec<Boolean> randomUser = parser.accepts("randomUser", "Whether to use a random user to read.")
- .withOptionalArg().ofType(Boolean.class)
- .defaultsTo(Boolean.FALSE);
- OptionSpec<File> csvFile = parser.accepts("csvFile", "File to write a CSV version of the benchmark data.")
- .withOptionalArg().ofType(File.class);
- OptionSpec<Boolean> flatStructure = parser.accepts("flatStructure", "Whether the test should use a flat structure or not.")
- .withOptionalArg().ofType(Boolean.class).defaultsTo(Boolean.FALSE);
- OptionSpec<Integer> numberOfUsers = parser.accepts("numberOfUsers")
- .withOptionalArg().ofType(Integer.class).defaultsTo(10000);
- OptionSpec<Boolean> setScope = parser.accepts("setScope", "Whether to use include setScope in the user query.")
- .withOptionalArg().ofType(Boolean.class)
- .defaultsTo(Boolean.FALSE);
- OptionSpec<Boolean> reverseOrder = parser.accepts("reverseOrder", "Invert order of configurations in composite setup.")
- .withOptionalArg().ofType(Boolean.class)
- .defaultsTo(Boolean.FALSE);
- OptionSpec<String> supportedPaths = parser.accepts("supportedPaths", "Supported paths in composite setup.")
- .withOptionalArg().ofType(String.class).withValuesSeparatedBy(',');
- OptionSpec<Boolean> dynamicMembership = parser.accepts("dynamicMembership", "Enable dynamic membership handling during synchronisation of external users.")
- .withOptionalArg().ofType(Boolean.class).defaultsTo(Boolean.FALSE);
- OptionSpec<String> autoMembership = parser.accepts("autoMembership", "Ids of those groups a given external identity automatically become member of.")
- .withOptionalArg().ofType(String.class).withValuesSeparatedBy(',');
- OptionSpec<Integer> roundtripDelay = parser.accepts("roundtripDelay", "Use simplified principal name lookup from ExtIdRef by specifying roundtrip delay of value < 0.")
- .withOptionalArg().ofType(Integer.class).defaultsTo(0);
- OptionSpec<Boolean> transientWrites = parser.accepts("transient", "Do not save data.")
- .withOptionalArg().ofType(Boolean.class)
- .defaultsTo(Boolean.FALSE);
- OptionSpec<Integer> vgcMaxAge = parser.accepts("vgcMaxAge", "Continuous DocumentNodeStore VersionGC max age in sec (RDB only)")
- .withRequiredArg().ofType(Integer.class).defaultsTo(-1);
- OptionSpec<Integer> coldSyncInterval = parser.accepts("coldSyncInterval", "interval between sync cycles in sec (Segment-Tar-Cold only)")
- .withRequiredArg().ofType(Integer.class).defaultsTo(5);
- OptionSpec<Boolean> coldUseDataStore = parser
- .accepts("useDataStore", "Whether to use a datastore in the cold standby topology (Segment-Tar-Cold only)")
- .withOptionalArg().ofType(Boolean.class)
- .defaultsTo(Boolean.TRUE);
- OptionSpec<Boolean> coldShareDataStore = parser
- .accepts("shareDataStore", "Whether to share the datastore for primary and standby in the cold standby topology (Segment-Tar-Cold only)")
- .withOptionalArg().ofType(Boolean.class)
- .defaultsTo(Boolean.FALSE);
- OptionSpec<Boolean> coldOneShotRun = parser
- .accepts("oneShotRun", "Whether to do a continuous sync between client and server or sync only once (Segment-Tar-Cold only)")
- .withOptionalArg().ofType(Boolean.class)
- .defaultsTo(Boolean.FALSE);
- OptionSpec<Boolean> coldSecure = parser
- .accepts("secure", "Whether to enable secure communication between primary and standby in the cold standby topology (Segment-Tar-Cold only)")
- .withOptionalArg().ofType(Boolean.class)
- .defaultsTo(Boolean.FALSE);
-
- OptionSpec<?> verbose = parser.accepts("verbose", "Enable verbose output");
- OptionSpec<String> nonOption = parser.nonOptions();
- OptionSpec<?> help = parser.acceptsAll(asList("h", "?", "help"), "show help").forHelp();
- OptionSet options = parser.parse(args);
- if(options.has(help)){
+ initOptionSet(args);
+
+ if (options.has(benchmarkOptions.getHelp())) {
parser.printHelpOn(System.out);
System.exit(0);
}
- String uri = mongouri.value(options);
+ String uri = benchmarkOptions.getMongouri().value(options);
if (uri == null) {
- String db = dbName.value(options);
+ String db = benchmarkOptions.getDbName().value(options);
if (db == null) {
db = OakFixture.getUniqueDatabaseName(OakFixture.OAK_MONGO);
}
- uri = "mongodb://" + host.value(options) + ":" + port.value(options) + "/" + db;
+ uri = "mongodb://" + benchmarkOptions.getHost().value(options) + ":"
+ + benchmarkOptions.getPort().value(options) + "/" + db;
}
- StatisticsProvider statsProvider = options.has(metrics) ? getStatsProvider() : StatisticsProvider.NOOP;
- int cacheSize = cache.value(options);
- RepositoryFixture[] allFixtures = new RepositoryFixture[] {
- new JackrabbitRepositoryFixture(base.value(options), cacheSize),
+
+ statsProvider = options.has(benchmarkOptions.getMetrics()) ? getStatsProvider() : StatisticsProvider.NOOP;
+ int cacheSize = benchmarkOptions.getCache().value(options);
+ RepositoryFixture[] allFixtures = new RepositoryFixture[]{
+ new JackrabbitRepositoryFixture(benchmarkOptions.getBase().value(options), cacheSize),
OakRepositoryFixture.getMemoryNS(cacheSize * MB),
OakRepositoryFixture.getMongo(uri,
- dropDBAfterTest.value(options), cacheSize * MB),
+ benchmarkOptions.getDropDBAfterTest().value(options), cacheSize * MB),
OakRepositoryFixture.getMongoWithDS(uri,
- dropDBAfterTest.value(options),
+ benchmarkOptions.getDropDBAfterTest().value(options),
cacheSize * MB,
- base.value(options),
- fdsCache.value(options)),
+ benchmarkOptions.getBase().value(options),
+ benchmarkOptions.getFdsCache().value(options)),
OakRepositoryFixture.getMongoNS(uri,
- dropDBAfterTest.value(options),
+ benchmarkOptions.getDropDBAfterTest().value(options),
cacheSize * MB),
- OakRepositoryFixture.getSegmentTar(base.value(options), 256, cacheSize,
- mmap.value(options)),
- OakRepositoryFixture.getSegmentTarWithDataStore(base.value(options), 256, cacheSize,
- mmap.value(options), fdsCache.value(options)),
- OakRepositoryFixture.getSegmentTarWithColdStandby(base.value(options), 256, cacheSize,
- mmap.value(options), coldUseDataStore.value(options), fdsCache.value(options),
- coldSyncInterval.value(options), coldShareDataStore.value(options), coldSecure.value(options),
- coldOneShotRun.value(options)),
- OakRepositoryFixture.getSegmentTarWithAzureSegmentStore(base.value(options),
- azureConnectionString.value(options),
- azureContainerName.value(options),
- azureRootPath.value(options),
- 256, cacheSize, true, fdsCache.value(options)),
- OakRepositoryFixture.getRDB(rdbjdbcuri.value(options), rdbjdbcuser.value(options),
- rdbjdbcpasswd.value(options), rdbjdbctableprefix.value(options),
- dropDBAfterTest.value(options), cacheSize * MB, vgcMaxAge.value(options)),
- 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), vgcMaxAge.value(options)),
- OakRepositoryFixture.getCompositeStore(base.value(options), 256, cacheSize,
- mmap.value(options)),
+ OakRepositoryFixture.getSegmentTar(benchmarkOptions.getBase().value(options), 256, cacheSize,
+ benchmarkOptions.getMmap().value(options)),
+ OakRepositoryFixture.getSegmentTarWithDataStore(benchmarkOptions.getBase().value(options), 256, cacheSize,
+ benchmarkOptions.getMmap().value(options), benchmarkOptions.getFdsCache().value(options)),
+ OakRepositoryFixture.getSegmentTarWithColdStandby(benchmarkOptions.getBase().value(options), 256, cacheSize,
+ benchmarkOptions.getMmap().value(options), benchmarkOptions.getColdUseDataStore().value(options),
+ benchmarkOptions.getFdsCache().value(options),
+ benchmarkOptions.getColdSyncInterval().value(options),
+ benchmarkOptions.getColdShareDataStore().value(options), benchmarkOptions.getColdSecure().value(options),
+ benchmarkOptions.getColdOneShotRun().value(options)),
+ OakRepositoryFixture.getSegmentTarWithAzureSegmentStore(benchmarkOptions.getBase().value(options),
+ benchmarkOptions.getAzureConnectionString().value(options),
+ benchmarkOptions.getAzureContainerName().value(options),
+ benchmarkOptions.getAzureRootPath().value(options),
+ 256, cacheSize, true, benchmarkOptions.getFdsCache().value(options)),
+ OakRepositoryFixture.getRDB(benchmarkOptions.getRdbjdbcuri().value(options),
+ benchmarkOptions.getRdbjdbcuser().value(options),
+ benchmarkOptions.getRdbjdbcpasswd().value(options), benchmarkOptions.getRdbjdbctableprefix().value(options),
+ benchmarkOptions.getDropDBAfterTest().value(options), cacheSize * MB, benchmarkOptions.getVgcMaxAge().value(options)),
+ OakRepositoryFixture.getRDBWithDS(benchmarkOptions.getRdbjdbcuri().value(options),
+ benchmarkOptions.getRdbjdbcuser().value(options),
+ benchmarkOptions.getRdbjdbcpasswd().value(options), benchmarkOptions.getRdbjdbctableprefix().value(options),
+ benchmarkOptions.getDropDBAfterTest().value(options), cacheSize * MB, benchmarkOptions.getBase().value(options),
+ benchmarkOptions.getFdsCache().value(options), benchmarkOptions.getVgcMaxAge().value(options)),
+ OakRepositoryFixture.getCompositeStore(benchmarkOptions.getBase().value(options), 256, cacheSize,
+ benchmarkOptions.getMmap().value(options)),
OakRepositoryFixture.getCompositeMemoryStore(),
OakRepositoryFixture.getCompositeMongoStore(uri, cacheSize * MB,
- dropDBAfterTest.value(options))
+ benchmarkOptions.getDropDBAfterTest().value(options))
};
- Benchmark[] allBenchmarks = new Benchmark[] {
- new OrderedIndexQueryOrderedIndexTest(),
- new OrderedIndexQueryStandardIndexTest(),
- new OrderedIndexQueryNoIndexTest(),
+ addToBenchMarkList(Arrays.asList(
+ new OrderedIndexQueryOrderedIndexTest(),
+ new OrderedIndexQueryStandardIndexTest(),
+ new OrderedIndexQueryNoIndexTest(),
new OrderedIndexInsertOrderedPropertyTest(),
- new OrderedIndexInsertStandardPropertyTest(),
- new OrderedIndexInsertNoIndexTest(),
- new LoginTest(
- runAsUser.value(options),
- runWithToken.value(options),
- noIterations.value(options)),
- new LoginLogoutTest(
- runAsUser.value(options),
- runWithToken.value(options),
- noIterations.value(options)),
- new LoginGetRootLogoutTest(
- runAsUser.value(options),
- runWithToken.value(options),
- noIterations.value(options)),
- new LoginWithTokensTest(numberOfUsers.value(options)),
- new LoginSystemTest(),
- new LoginImpersonateTest(),
- new LoginWithMembershipTest(
- runWithToken.value(options),
- noIterations.value(options),
- numberOfGroups.value(options),
- nestedGroups.value(options),
- expiration.value(options)),
- new LoginWithMembersTest(
- runWithToken.value(options),
- noIterations.value(options),
- numberOfGroups.value(options),
- expiration.value(options)),
- new NamespaceTest(),
- new NamespaceRegistryTest(),
- new ReadPropertyTest(),
+ new OrderedIndexInsertStandardPropertyTest(),
+ new OrderedIndexInsertNoIndexTest(),
+ new LoginTest(
+ benchmarkOptions.getRunAsUser().value(options),
+ benchmarkOptions.getRunWithToken().value(options),
+ benchmarkOptions.getNoIterations().value(options)),
+ new LoginLogoutTest(
+ benchmarkOptions.getRunAsUser().value(options),
+ benchmarkOptions.getRunWithToken().value(options),
+ benchmarkOptions.getNoIterations().value(options)),
+ new LoginGetRootLogoutTest(
+ benchmarkOptions.getRunAsUser().value(options),
+ benchmarkOptions.getRunWithToken().value(options),
+ benchmarkOptions.getNoIterations().value(options)),
+ new LoginWithTokensTest(benchmarkOptions.getNumberOfUsers().value(options)),
+ new LoginSystemTest(),
+ new LoginImpersonateTest(),
+ new LoginWithMembershipTest(
+ benchmarkOptions.getRunWithToken().value(options),
+ benchmarkOptions.getNoIterations().value(options),
+ benchmarkOptions.getNumberOfGroups().value(options),
+ benchmarkOptions.getNestedGroups().value(options),
+ benchmarkOptions.getExpiration().value(options)),
+ new LoginWithMembersTest(
+ benchmarkOptions.getRunWithToken().value(options),
+ benchmarkOptions.getNoIterations().value(options),
+ benchmarkOptions.getNumberOfGroups().value(options),
+ benchmarkOptions.getExpiration().value(options)),
+ new NamespaceTest(),
+ new NamespaceRegistryTest(),
+ new ReadPropertyTest(),
GetNodeTest.withAdmin(),
GetNodeTest.withAnonymous(),
new GetMixinNodeTypesTest(),
@@ -328,118 +193,119 @@ public class BenchmarkRunner {
new FlatTreeUpdateTest(),
new CreateManyChildNodesTest(),
new CreateManyNodesTest(),
- new UpdateManyChildNodesTest(),
- new TransientManyChildNodesTest(),
- new WikipediaImport(
- wikipedia.value(options),
- flatStructure.value(options),
- report.value(options)),
- new CreateNodesBenchmark(),
- new ManyNodes(options.has(verbose)),
- new ObservationTest(),
- new RevisionGCTest(),
- new ContinuousRevisionGCTest(),
- new XmlImportTest(),
- new FlatTreeWithAceForSamePrincipalTest(),
- new ReadDeepTreeTest(
- runAsAdmin.value(options),
- itemsToRead.value(options),
- report.value(options)),
- new CompositeAuthorizationTest(
- runAsAdmin.value(options),
- itemsToRead.value(options)), // NOTE: this is currently the no of configurations
- new CugTest(runAsAdmin.value(options),
- itemsToRead.value(options),
- randomUser.value(options),
- supportedPaths.values(options),
- reverseOrder.value(options)),
- new CugOakTest(runAsAdmin.value(options),
- itemsToRead.value(options),
- randomUser.value(options),
- supportedPaths.values(options),
- reverseOrder.value(options)),
- new PrinicipalBasedReadTest(
- itemsToRead.value(options),
- numberOfInitialAce.value(options),
- numberOfUsers.value(options),
- entriesForEachPrincipal.value(options),
- reverseOrder.value(options),
- compositionType.value(options),
- useAggregationFilter.value(options),
- report.value(options)),
- new PermissionEvaluationTest(
- itemsToRead.value(options),
- numberOfInitialAce.value(options),
- numberOfUsers.value(options),
- entriesForEachPrincipal.value(options),
- reverseOrder.value(options),
- compositionType.value(options),
- useAggregationFilter.value(options),
- report.value(options)),
- new HasItemGetItemIsModifiedTest(
- itemsToRead.value(options),
- numberOfInitialAce.value(options),
- numberOfUsers.value(options),
- entriesForEachPrincipal.value(options),
- reverseOrder.value(options),
- compositionType.value(options),
- useAggregationFilter.value(options),
- report.value(options)),
- new EagerCacheSizeTest(itemsToRead.value(options),
- repeatedRead.value(options),
- numberOfInitialAce.value(options),
- numberOfUsers.value(options),
- cacheSize,
- report.value(options)),
- new ConcurrentReadDeepTreeTest(
- runAsAdmin.value(options),
- itemsToRead.value(options),
- report.value(options)),
- new ConcurrentReadSinglePolicyTreeTest(
- runAsAdmin.value(options),
- itemsToRead.value(options),
- report.value(options)),
- new ConcurrentReadAccessControlledTreeTest(
- runAsAdmin.value(options),
- itemsToRead.value(options),
- report.value(options)),
- new ConcurrentReadAccessControlledTreeTest2(
- runAsAdmin.value(options),
- itemsToRead.value(options),
- report.value(options)),
- new ConcurrentReadRandomNodeAndItsPropertiesTest(
- runAsAdmin.value(options),
- itemsToRead.value(options),
- report.value(options)),
- new ConcurrentHasPermissionTest(
- runAsAdmin.value(options),
- itemsToRead.value(options),
- report.value(options)),
- new ConcurrentHasPermissionTest2(
- runAsAdmin.value(options),
- itemsToRead.value(options),
- report.value(options)),
- new ManyUserReadTest(
- runAsAdmin.value(options),
- itemsToRead.value(options),
- report.value(options),
- randomUser.value(options)),
- new ReadWithMembershipTest(
- itemsToRead.value(options),
- report.value(options),
- numberOfGroups.value(options),
- numberOfInitialAce.value(options)),
- new ConcurrentTraversalTest(
- runAsAdmin.value(options),
- itemsToRead.value(options),
- report.value(options),
- randomUser.value(options)),
- new ConcurrentWriteACLTest(itemsToRead.value(options)),
- new ConcurrentEveryoneACLTest(runAsAdmin.value(options), itemsToRead.value(options)),
- new AceCreationTest(batchSize.value(options), numberOfInitialAce.value(options), transientWrites.value(options)),
+ new UpdateManyChildNodesTest(),
+ new TransientManyChildNodesTest(),
+ new WikipediaImport(
+ benchmarkOptions.getWikipedia().value(options),
+ benchmarkOptions.getFlatStructure().value(options),
+ benchmarkOptions.getReport().value(options)),
+ new CreateNodesBenchmark(),
+ new ManyNodes(options.has(benchmarkOptions.getVerbose())),
+ new ObservationTest(),
+ new RevisionGCTest(),
+ new ContinuousRevisionGCTest(),
+ new XmlImportTest(),
+ new FlatTreeWithAceForSamePrincipalTest(),
+ new ReadDeepTreeTest(
+ benchmarkOptions.getRunAsAdmin().value(options),
+ benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getReport().value(options)),
+ new CompositeAuthorizationTest(
+ benchmarkOptions.getRunAsAdmin().value(options),
+ benchmarkOptions.getItemsToRead().value(options)), // NOTE: this is currently the no of configurations
+ new CugTest(benchmarkOptions.getRunAsAdmin().value(options),
+ benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getRandomUser().value(options),
+ benchmarkOptions.getSupportedPaths().values(options),
+ benchmarkOptions.getReverseOrder().value(options)),
+ new CugOakTest(benchmarkOptions.getRunAsAdmin().value(options),
+ benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getRandomUser().value(options),
+ benchmarkOptions.getSupportedPaths().values(options),
+ benchmarkOptions.getReverseOrder().value(options)),
+ new PrinicipalBasedReadTest(
+ benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getNumberOfInitialAce().value(options),
+ benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getEntriesForEachPrincipal().value(options),
+ benchmarkOptions.getReverseOrder().value(options),
+ benchmarkOptions.getCompositionType().value(options),
+ benchmarkOptions.getUseAggregationFilter().value(options),
+ benchmarkOptions.getReport().value(options)),
+ new PermissionEvaluationTest(
+ benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getNumberOfInitialAce().value(options),
+ benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getEntriesForEachPrincipal().value(options),
+ benchmarkOptions.getReverseOrder().value(options),
+ benchmarkOptions.getCompositionType().value(options),
+ benchmarkOptions.getUseAggregationFilter().value(options),
+ benchmarkOptions.getReport().value(options)),
+ new HasItemGetItemIsModifiedTest(
+ benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getNumberOfInitialAce().value(options),
+ benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getEntriesForEachPrincipal().value(options),
+ benchmarkOptions.getReverseOrder().value(options),
+ benchmarkOptions.getCompositionType().value(options),
+ benchmarkOptions.getUseAggregationFilter().value(options),
+ benchmarkOptions.getReport().value(options)),
+ new EagerCacheSizeTest(benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getRepeatedRead().value(options),
+ benchmarkOptions.getNumberOfInitialAce().value(options),
+ benchmarkOptions.getNumberOfUsers().value(options),
+ cacheSize,
+ benchmarkOptions.getReport().value(options)),
+ new ConcurrentReadDeepTreeTest(
+ benchmarkOptions.getRunAsAdmin().value(options),
+ benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getReport().value(options)),
+ new ConcurrentReadSinglePolicyTreeTest(
+ benchmarkOptions.getRunAsAdmin().value(options),
+ benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getReport().value(options)),
+ new ConcurrentReadAccessControlledTreeTest(
+ benchmarkOptions.getRunAsAdmin().value(options),
+ benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getReport().value(options)),
+ new ConcurrentReadAccessControlledTreeTest2(
+ benchmarkOptions.getRunAsAdmin().value(options),
+ benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getReport().value(options)),
+ new ConcurrentReadRandomNodeAndItsPropertiesTest(
+ benchmarkOptions.getRunAsAdmin().value(options),
+ benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getReport().value(options)),
+ new ConcurrentHasPermissionTest(
+ benchmarkOptions.getRunAsAdmin().value(options),
+ benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getReport().value(options)),
+ new ConcurrentHasPermissionTest2(
+ benchmarkOptions.getRunAsAdmin().value(options),
+ benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getReport().value(options)),
+ new ManyUserReadTest(
+ benchmarkOptions.getRunAsAdmin().value(options),
+ benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getReport().value(options),
+ benchmarkOptions.getRandomUser().value(options)),
+ new ReadWithMembershipTest(
+ benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getReport().value(options),
+ benchmarkOptions.getNumberOfGroups().value(options),
+ benchmarkOptions.getNumberOfInitialAce().value(options)),
+ new ConcurrentTraversalTest(
+ benchmarkOptions.getRunAsAdmin().value(options),
+ benchmarkOptions.getItemsToRead().value(options),
+ benchmarkOptions.getReport().value(options),
+ benchmarkOptions.getRandomUser().value(options)),
+ new ConcurrentWriteACLTest(benchmarkOptions.getItemsToRead().value(options)),
+ new ConcurrentEveryoneACLTest(benchmarkOptions.getRunAsAdmin().value(options), benchmarkOptions.getItemsToRead().value(options)),
+ new AceCreationTest(benchmarkOptions.getBatchSize().value(options), benchmarkOptions.getNumberOfInitialAce().value(options),
+ benchmarkOptions.getTransientWrites().value(options)),
- ReadManyTest.linear("LinearReadEmpty", 1, ReadManyTest.EMPTY),
- ReadManyTest.linear("LinearReadFiles", 1, ReadManyTest.FILES),
+ ReadManyTest.linear("LinearReadEmpty", 1, ReadManyTest.EMPTY),
+ ReadManyTest.linear("LinearReadFiles", 1, ReadManyTest.FILES),
ReadManyTest.linear("LinearReadNodes", 1, ReadManyTest.NODES),
ReadManyTest.uniform("UniformReadEmpty", 1, ReadManyTest.EMPTY),
ReadManyTest.uniform("UniformReadFiles", 1, ReadManyTest.FILES),
@@ -447,109 +313,116 @@ public class BenchmarkRunner {
new ConcurrentCreateNodesTest(),
new SequentialCreateNodesTest(),
new CreateManyIndexedNodesTest(),
- new GetPoliciesTest(),
- new ConcurrentFileWriteTest(),
- new GetAuthorizableByIdTest(
- numberOfUsers.value(options),
- flatStructure.value(options)),
- new GetAuthorizableByPrincipalTest(
- numberOfUsers.value(options),
- flatStructure.value(options)),
- new GetPrincipalTest(
- numberOfUsers.value(options),
- flatStructure.value(options)),
- new GetGroupPrincipalsTest(
- numberOfGroups.value(options),
- nestedGroups.value(options)),
-
- // benchmarks adding multiple or single members
- new AddMembersTest(
- numberOfUsers.value(options),
- batchSize.value(options),
- importBehavior.value(options)),
- new AddMemberTest(
- numberOfUsers.value(options),
- batchSize.value(options)),
- new AddUniqueMembersTest(
- numberOfUsers.value(options),
- batchSize.value(options)),
-
- // benchmarks removing multiple or single members
- new RemoveMembersTest(
- numberOfUsers.value(options),
- batchSize.value(options)),
- new RemoveMemberTest(
- numberOfUsers.value(options),
- batchSize.value(options)),
-
- // benchmark testing isMember/isDeclared member; each user only being member of 1 group
- new IsMemberTest(
- numberOfUsers.value(options),
- nestedGroups.value(options)),
- new IsDeclaredMemberTest(
- numberOfUsers.value(options),
- nestedGroups.value(options)),
-
- // 4 benchmarks with the same setup test various membership operations.
- new MemberDeclaredMemberOf(
- numberOfGroups.value(options),
- nestedGroups.value(options),
- numberOfUsers.value(options)),
- new MemberMemberOf(
- numberOfGroups.value(options),
- nestedGroups.value(options),
- numberOfUsers.value(options)),
- new MemberIsDeclaredMember(
- numberOfGroups.value(options),
- nestedGroups.value(options),
- numberOfUsers.value(options)),
- new MemberIsMember(
- numberOfGroups.value(options),
- nestedGroups.value(options),
- numberOfUsers.value(options)),
-
- new FullTextSearchTest(
- wikipedia.value(options),
- flatStructure.value(options),
- report.value(options), withStorage.value(options)),
- new FullTextSolrSearchTest(
- wikipedia.value(options),
- flatStructure.value(options),
- report.value(options), withStorage.value(options), withServer.value(options)),
- new FindAuthorizableWithScopeTest(numberOfUsers.value(options), numberOfGroups.value(options), queryMaxCount.value(options), setScope.value(options), declaredMembership.value(options), runAsAdmin.value(options)),
- new LucenePropertyFullTextTest(
- wikipedia.value(options),
- flatStructure.value(options),
- report.value(options), withStorage.value(options)),
- new LucenePropertyFTSeparated(
- wikipedia.value(options),
- flatStructure.value(options),
- report.value(options), withStorage.value(options)),
- new ReplicaCrashResilienceTest(),
-
- // benchmarks for oak-auth-external
- new ExternalLoginTest(numberOfUsers.value(options), numberOfGroups.value(options),
- expiration.value(options), dynamicMembership.value(options), autoMembership.values(options),
- report.value(options), statsProvider),
- new SyncAllExternalUsersTest(numberOfUsers.value(options), numberOfGroups.value(options), expiration.value(options), dynamicMembership.value(options), autoMembership.values(options)),
- new SyncAllUsersTest(numberOfUsers.value(options), numberOfGroups.value(options), expiration.value(options), dynamicMembership.value(options), autoMembership.values(options)),
- new SyncExternalUsersTest(numberOfUsers.value(options), numberOfGroups.value(options), expiration.value(options), dynamicMembership.value(options), autoMembership.values(options), batchSize.value(options)),
- new PrincipalNameResolutionTest(numberOfUsers.value(options), numberOfGroups.value(options), expiration.value(options), roundtripDelay.value(options)),
- new ListIdentitiesTest(numberOfUsers.value(options)),
-
- new HybridIndexTest(base.value(options), statsProvider),
- new BundlingNodeTest(),
- new PersistentCacheTest(statsProvider),
- new StringWriteTest(),
- new BasicWriteTest(),
- new CanReadNonExisting(),
- new IsNodeTypeTest(runAsAdmin.value(options)),
- new SetPropertyTransientTest(),
- new GetURITest(),
- new ISO8601FormatterTest()
- };
+ new GetPoliciesTest(),
+ new ConcurrentFileWriteTest(),
+ new GetAuthorizableByIdTest(
+ benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getFlatStructure().value(options)),
+ new GetAuthorizableByPrincipalTest(
+ benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getFlatStructure().value(options)),
+ new GetPrincipalTest(
+ benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getFlatStructure().value(options)),
+ new GetGroupPrincipalsTest(
+ benchmarkOptions.getNumberOfGroups().value(options),
+ benchmarkOptions.getNestedGroups().value(options)),
+
+ // benchmarks adding multiple or single members
+ new AddMembersTest(
+ benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getBatchSize().value(options),
+ benchmarkOptions.getImportBehavior().value(options)),
+ new AddMemberTest(
+ benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getBatchSize().value(options)),
+ new AddUniqueMembersTest(
+ benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getBatchSize().value(options)),
+
+ // benchmarks removing multiple or single members
+ new RemoveMembersTest(
+ benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getBatchSize().value(options)),
+ new RemoveMemberTest(
+ benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getBatchSize().value(options)),
+
+ // benchmark testing isMember/isDeclared member; each user only being member of 1 group
+ new IsMemberTest(
+ benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getNestedGroups().value(options)),
+ new IsDeclaredMemberTest(
+ benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getNestedGroups().value(options)),
+
+ // 4 benchmarks with the same setup test various membership operations.
+ new MemberDeclaredMemberOf(
+ benchmarkOptions.getNumberOfGroups().value(options),
+ benchmarkOptions.getNestedGroups().value(options),
+ benchmarkOptions.getNumberOfUsers().value(options)),
+ new MemberMemberOf(
+ benchmarkOptions.getNumberOfGroups().value(options),
+ benchmarkOptions.getNestedGroups().value(options),
+ benchmarkOptions.getNumberOfUsers().value(options)),
+ new MemberIsDeclaredMember(
+ benchmarkOptions.getNumberOfGroups().value(options),
+ benchmarkOptions.getNestedGroups().value(options),
+ benchmarkOptions.getNumberOfUsers().value(options)),
+ new MemberIsMember(
+ benchmarkOptions.getNumberOfGroups().value(options),
+ benchmarkOptions.getNestedGroups().value(options),
+ benchmarkOptions.getNumberOfUsers().value(options)),
+ // TODO - remove this from here and implement runner in oak-benchmarks-solr
+ // (Not high priority now - do it after elastic implementation)
+ /*new FullTextSolrSearchTest(
+ benchmarkOptions.getWikipedia().value(options),
+ benchmarkOptions.getFlatStructure().value(options),
+ benchmarkOptions.getReport().value(options), benchmarkOptions.getWithStorage().value(options),
+ benchmarkOptions.getWithServer().value(options)),*/
+ new FindAuthorizableWithScopeTest(benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getNumberOfGroups().value(options),
+ benchmarkOptions.getQueryMaxCount().value(options), benchmarkOptions.getSetScope().value(options),
+ benchmarkOptions.getDeclaredMembership().value(options),
+ benchmarkOptions.getRunAsAdmin().value(options)),
+ new ReplicaCrashResilienceTest(),
+
+ // benchmarks for oak-auth-external
+ new ExternalLoginTest(benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getNumberOfGroups().value(options),
+ benchmarkOptions.getExpiration().value(options), benchmarkOptions.getDynamicMembership().value(options),
+ benchmarkOptions.getAutoMembership().values(options),
+ benchmarkOptions.getReport().value(options), statsProvider),
+ new SyncAllExternalUsersTest(benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getNumberOfGroups().value(options), benchmarkOptions.getExpiration().value(options),
+ benchmarkOptions.getDynamicMembership().value(options),
+ benchmarkOptions.getAutoMembership().values(options)),
+ new SyncAllUsersTest(benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getNumberOfGroups().value(options), benchmarkOptions.getExpiration().value(options),
+ benchmarkOptions.getDynamicMembership().value(options),
+ benchmarkOptions.getAutoMembership().values(options)),
+ new SyncExternalUsersTest(benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getNumberOfGroups().value(options), benchmarkOptions.getExpiration().value(options),
+ benchmarkOptions.getDynamicMembership().value(options),
+ benchmarkOptions.getAutoMembership().values(options), benchmarkOptions.getBatchSize().value(options)),
+ new PrincipalNameResolutionTest(benchmarkOptions.getNumberOfUsers().value(options),
+ benchmarkOptions.getNumberOfGroups().value(options), benchmarkOptions.getExpiration().value(options),
+ benchmarkOptions.getRoundtripDelay().value(options)),
+ new ListIdentitiesTest(benchmarkOptions.getNumberOfUsers().value(options)),
+ new BundlingNodeTest(),
+ new PersistentCacheTest(statsProvider),
+ new StringWriteTest(),
+ new BasicWriteTest(),
+ new CanReadNonExisting(),
+ new IsNodeTypeTest(benchmarkOptions.getRunAsAdmin().value(options)),
+ new SetPropertyTransientTest(),
+ new GetURITest(),
+ new ISO8601FormatterTest()
+ )
+ );
- Set<String> argset = Sets.newHashSet(nonOption.values(options));
+
+ Set<String> argset = Sets.newHashSet(benchmarkOptions.getNonOption().values(options));
List<RepositoryFixture> fixtures = Lists.newArrayList();
for (RepositoryFixture fixture : allFixtures) {
if (argset.remove(fixture.toString())) {
@@ -577,14 +450,14 @@ public class BenchmarkRunner {
if (argset.isEmpty()) {
PrintStream out = null;
- if (options.has(csvFile)) {
- out = new PrintStream(FileUtils.openOutputStream(csvFile.value(options), true));
+ if (options.has(benchmarkOptions.getCsvFile())) {
+ out = new PrintStream(FileUtils.openOutputStream(benchmarkOptions.getCsvFile().value(options), true));
}
for (Benchmark benchmark : benchmarks) {
if (benchmark instanceof CSVResultGenerator) {
((CSVResultGenerator) benchmark).setPrintStream(out);
}
- benchmark.run(fixtures, options.valuesOf(concurrency));
+ benchmark.run(fixtures, options.valuesOf(benchmarkOptions.getConcurrency()));
}
if (out != null) {
out.close();
@@ -615,6 +488,18 @@ public class BenchmarkRunner {
}
}
+ protected static void initOptionSet(String[] args) throws IOException {
+ if (!initFlag) {
+ benchmarkOptions = new BenchmarkOptions(parser);
+ options = parser.parse(args);
+ initFlag = true;
+ }
+ }
+
+ protected static void addToBenchMarkList(List<Benchmark> benchmarks) {
+ allBenchmarks.addAll(benchmarks);
+ }
+
private static void configure(RepositoryFixture fixture, StatisticsProvider statsProvider) {
if (fixture instanceof OakRepositoryFixture) {
((OakRepositoryFixture) fixture).setStatisticsProvider(statsProvider);
@@ -630,9 +515,15 @@ public class BenchmarkRunner {
return tmp.toString();
}
- private static MetricStatisticsProvider getStatsProvider(){
- ScheduledExecutorService executorService = MoreExecutors.getExitingScheduledExecutorService(
- (ScheduledThreadPoolExecutor) Executors.newScheduledThreadPool(1));
- return new MetricStatisticsProvider(null, executorService);
+ protected static StatisticsProvider getStatsProvider() {
+ if (statsProvider == null) {
+ ScheduledExecutorService executorService = MoreExecutors.getExitingScheduledExecutorService(
+ (ScheduledThreadPoolExecutor) Executors.newScheduledThreadPool(1));
+
+ return new MetricStatisticsProvider(null, executorService);
+ } else {
+ return statsProvider;
+ }
+
}
}
Modified: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/FullTextSearchTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/FullTextSearchTest.java?rev=1875760&r1=1875759&r2=1875760&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/FullTextSearchTest.java (original)
+++ jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/FullTextSearchTest.java Fri Mar 27 07:44:43 2020
@@ -33,7 +33,6 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.jcr.Node;
-import javax.jcr.Repository;
import javax.jcr.Session;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
@@ -41,18 +40,7 @@ import javax.jcr.query.QueryResult;
import javax.jcr.query.RowIterator;
import org.apache.commons.io.FileUtils;
-import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.benchmark.wikipedia.WikipediaImport;
-import org.apache.jackrabbit.oak.fixture.JcrCreator;
-import org.apache.jackrabbit.oak.fixture.OakRepositoryFixture;
-import org.apache.jackrabbit.oak.fixture.RepositoryFixture;
-import org.apache.jackrabbit.oak.jcr.Jcr;
-import org.apache.jackrabbit.oak.plugins.index.lucene.IndexCopier;
-import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexEditorProvider;
-import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexProvider;
-import org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneInitializerHelper;
-import org.apache.jackrabbit.oak.spi.commit.Observer;
-import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
public class FullTextSearchTest extends AbstractTest<FullTextSearchTest.TestContext> {
@@ -65,8 +53,6 @@ public class FullTextSearchTest extends
private int maxSampleSize = 100;
- private final boolean disableCopyOnRead = Boolean.getBoolean("disableCopyOnRead");
-
private final WikipediaImport importer;
private final Set<String> sampleSet = newHashSet();
@@ -84,9 +70,9 @@ public class FullTextSearchTest extends
*/
protected Boolean storageEnabled;
- private ExecutorService executorService = Executors.newFixedThreadPool(2);
+ protected ExecutorService executorService = Executors.newFixedThreadPool(2);
- private File indexCopierDir;
+ protected File indexCopierDir;
public FullTextSearchTest(File dump, boolean flat, boolean doReport, Boolean storageEnabled) {
this.importer = new WikipediaImport(dump, flat, doReport) {
@@ -175,36 +161,6 @@ public class FullTextSearchTest extends
return words;
}
- @Override
- protected Repository[] createRepository(RepositoryFixture fixture) throws Exception {
- if (fixture instanceof OakRepositoryFixture) {
- return ((OakRepositoryFixture) fixture).setUpCluster(1, new JcrCreator() {
- @Override
- public Jcr customize(Oak oak) {
- LuceneIndexProvider provider = createLuceneIndexProvider();
- oak.with((QueryIndexProvider) provider)
- .with((Observer) provider)
- .with(new LuceneIndexEditorProvider())
- .with(new LuceneInitializerHelper("luceneGlobal", storageEnabled));
- return new Jcr(oak);
- }
- });
- }
- return super.createRepository(fixture);
- }
-
- private LuceneIndexProvider createLuceneIndexProvider() {
- if (!disableCopyOnRead) {
- try {
- IndexCopier copier = new IndexCopier(executorService, indexCopierDir, true);
- return new LuceneIndexProvider(copier);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
- return new LuceneIndexProvider();
- }
-
private File createTemporaryFolder(File parentFolder){
File createdFolder = null;
try {
Modified: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/util/OakIndexUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/util/OakIndexUtils.java?rev=1875760&r1=1875759&r2=1875760&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/util/OakIndexUtils.java (original)
+++ jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/util/OakIndexUtils.java Fri Mar 27 07:44:43 2020
@@ -21,10 +21,8 @@ import com.google.common.collect.Lists;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
-import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants;
import org.apache.jackrabbit.oak.plugins.index.property.OrderedIndex;
import org.apache.jackrabbit.oak.plugins.index.property.PropertyIndexEditorProvider;
-import org.apache.jackrabbit.oak.plugins.index.search.FulltextIndexConstants;
import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
import org.jetbrains.annotations.Nullable;
@@ -284,75 +282,5 @@ public class OakIndexUtils {
session.save();
return indexDef;
- }
-
- /**
- * Helper method to create or update a lucene property index definition.
- *
- * @param session the session
- * @param indexDefinitionName the name of the node for the index definition
- * @param propertyNames the list of properties to index
- * @param type the types of the properties in order of the properties
- * @param orderedPropsMap the ordered props and its properties
- * @param persistencePath the path if the persistence=file (default is repository)
- * @return the node just created
- * @throws RepositoryException the repository exception
- */
- public static Node luceneIndexDefinition(Session session, String indexDefinitionName,
- String async, String[] propertyNames, String[] type,
- Map<String, Map<String, String>> orderedPropsMap, String persistencePath)
- throws RepositoryException {
-
- Node root = session.getRootNode();
- Node indexDefRoot = JcrUtils.getOrAddNode(root, IndexConstants.INDEX_DEFINITIONS_NAME,
- NodeTypeConstants.NT_UNSTRUCTURED);
-
- Node indexDef = JcrUtils.getOrAddNode(indexDefRoot, indexDefinitionName,
- IndexConstants.INDEX_DEFINITIONS_NODE_TYPE);
-
- indexDef.setProperty(IndexConstants.TYPE_PROPERTY_NAME, LuceneIndexConstants.TYPE_LUCENE);
- indexDef.setProperty(FulltextIndexConstants.FULL_TEXT_ENABLED, false);
- if (async != null) {
- indexDef.setProperty(IndexConstants.ASYNC_PROPERTY_NAME, async);
- }
- // Set indexed property names
- indexDef.setProperty(FulltextIndexConstants.INCLUDE_PROPERTY_NAMES, propertyNames,
- PropertyType.NAME);
-
- Node propsNode = JcrUtils.getOrAddNode(indexDef, FulltextIndexConstants.PROP_NODE);
- for (int i = 0; i < propertyNames.length; i++) {
- Node propNode =
- JcrUtils.getOrAddNode(propsNode, propertyNames[i], NodeTypeConstants.NT_OAK_UNSTRUCTURED);
- propNode.setProperty(FulltextIndexConstants.PROP_TYPE, type[i]);
- }
-
- // Set ordered property names
- if ((orderedPropsMap != null) && !orderedPropsMap.isEmpty()) {
- List<String> orderedProps = Lists.newArrayList();
- for (Map.Entry<String, Map<String, String>> orderedPropEntry : orderedPropsMap
- .entrySet()) {
- Node propNode = JcrUtils.getOrAddNode(propsNode, orderedPropEntry.getKey(),
- NodeTypeConstants.NT_OAK_UNSTRUCTURED);
- propNode.setProperty(FulltextIndexConstants.PROP_TYPE,
- orderedPropEntry.getValue().get(FulltextIndexConstants.PROP_TYPE));
- orderedProps.add(orderedPropEntry.getKey());
- }
- if (!orderedProps.isEmpty()) {
- indexDef.setProperty(FulltextIndexConstants.ORDERED_PROP_NAMES,
- orderedProps.toArray(new String[orderedProps.size()]),
- PropertyType.NAME);
- }
- }
-
- // Set file persistence if specified
- if (!Strings.isNullOrEmpty(persistencePath)) {
- indexDef.setProperty(FulltextIndexConstants.PERSISTENCE_NAME,
- FulltextIndexConstants.PERSISTENCE_FILE);
- indexDef.setProperty(FulltextIndexConstants.PERSISTENCE_PATH,
- persistencePath);
- }
- session.save();
-
- return indexDef;
}
}
Added: jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityOptions.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityOptions.java?rev=1875760&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityOptions.java (added)
+++ jackrabbit/oak/trunk/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/scalability/ScalabilityOptions.java Fri Mar 27 07:44:43 2020
@@ -0,0 +1,207 @@
+/*
+ * 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.scalability;
+
+
+import joptsimple.OptionParser;
+import joptsimple.OptionSpec;
+
+import java.io.File;
+
+import static java.util.Arrays.asList;
+
+public class ScalabilityOptions {
+
+ private final OptionSpec<File> base;
+ private final OptionSpec<String> host;
+ private final OptionSpec<Integer> port;
+ private final OptionSpec<String> dbName;
+ private final OptionSpec<Boolean> dropDBAfterTest;
+ private final OptionSpec<String> rdbjdbcuri;
+ private final OptionSpec<String> rdbjdbcuser;
+ private final OptionSpec<String> rdbjdbcpasswd;
+ private final OptionSpec<String> rdbjdbctableprefix;
+ private final OptionSpec<Boolean> mmap;
+ private final OptionSpec<Integer> cache;
+ private final OptionSpec<Integer> fdsCache;
+ private final OptionSpec<Boolean> withStorage;
+ private final OptionSpec<Integer> coldSyncInterval;
+ private final OptionSpec<Boolean> coldUseDataStore;
+ private final OptionSpec<Boolean> coldShareDataStore;
+ private final OptionSpec<Boolean> coldOneShotRun;
+ private final OptionSpec<Boolean> coldSecure;
+ private final OptionSpec<?> help;
+ private final OptionSpec<String> nonOption;
+ private final OptionSpec<File> csvFile;
+
+ public OptionSpec<Integer> getColdSyncInterval() {
+ return coldSyncInterval;
+ }
+
+ public OptionSpec<File> getBase() {
+ return base;
+ }
+
+ public OptionSpec<String> getHost() {
+ return host;
+ }
+
+ public OptionSpec<Integer> getPort() {
+ return port;
+ }
+
+ public OptionSpec<String> getDbName() {
+ return dbName;
+ }
+
+ public OptionSpec<Boolean> getDropDBAfterTest() {
+ return dropDBAfterTest;
+ }
+
+ public OptionSpec<String> getRdbjdbcuri() {
+ return rdbjdbcuri;
+ }
+
+ public OptionSpec<String> getRdbjdbcuser() {
+ return rdbjdbcuser;
+ }
+
+ public OptionSpec<String> getRdbjdbcpasswd() {
+ return rdbjdbcpasswd;
+ }
+
+ public OptionSpec<String> getRdbjdbctableprefix() {
+ return rdbjdbctableprefix;
+ }
+
+ public OptionSpec<Boolean> getMmap() {
+ return mmap;
+ }
+
+ public OptionSpec<Integer> getCache() {
+ return cache;
+ }
+
+ public OptionSpec<Integer> getFdsCache() {
+ return fdsCache;
+ }
+
+ public OptionSpec<Boolean> getWithStorage() {
+ return withStorage;
+ }
+
+ public OptionSpec<Boolean> getColdUseDataStore() {
+ return coldUseDataStore;
+ }
+
+ public OptionSpec<Boolean> getColdShareDataStore() {
+ return coldShareDataStore;
+ }
+
+ public OptionSpec<Boolean> getColdOneShotRun() {
+ return coldOneShotRun;
+ }
+
+ public OptionSpec<Boolean> getColdSecure() {
+ return coldSecure;
+ }
+
+ public OptionSpec<?> getHelp() {
+ return help;
+ }
+
+ public OptionSpec<String> getNonOption() {
+ return nonOption;
+ }
+
+ public OptionSpec<File> getCsvFile() {
+ return csvFile;
+ }
+
+
+
+ public ScalabilityOptions(OptionParser parser) {
+
+ base = parser.accepts("base", "Base directory")
+ .withRequiredArg().ofType(File.class)
+ .defaultsTo(new File("target"));
+ host = parser.accepts("host", "MongoDB host")
+ .withRequiredArg().defaultsTo("localhost");
+ port = parser.accepts("port", "MongoDB port")
+ .withRequiredArg().ofType(Integer.class).defaultsTo(27017);
+ dbName = parser.accepts("db", "MongoDB database")
+ .withRequiredArg();
+ dropDBAfterTest =
+ parser.accepts("dropDBAfterTest",
+ "Whether to drop the MongoDB database after the test")
+ .withOptionalArg().ofType(Boolean.class).defaultsTo(true);
+ rdbjdbcuri = parser.accepts("rdbjdbcuri", "RDB JDBC URI")
+ .withOptionalArg().defaultsTo("jdbc:h2:./target/benchmark");
+ rdbjdbcuser = parser.accepts("rdbjdbcuser", "RDB JDBC user")
+ .withOptionalArg().defaultsTo("");
+ rdbjdbcpasswd = parser.accepts("rdbjdbcpasswd", "RDB JDBC password")
+ .withOptionalArg().defaultsTo("");
+ rdbjdbctableprefix = parser.accepts("rdbjdbctableprefix", "RDB JDBC table prefix")
+ .withOptionalArg().defaultsTo("");
+ mmap = parser.accepts("mmap", "TarMK memory mapping")
+ .withOptionalArg().ofType(Boolean.class)
+ .defaultsTo("64".equals(System.getProperty("sun.arch.data.model")));
+ cache = parser.accepts("cache", "cache size (MB)")
+ .withRequiredArg().ofType(Integer.class).defaultsTo(100);
+ fdsCache = parser.accepts("blobCache", "cache size (MB)")
+ .withRequiredArg().ofType(Integer.class).defaultsTo(32);
+ withStorage = parser
+ .accepts("storage", "Index storage enabled").withOptionalArg()
+ .ofType(Boolean.class);
+ csvFile =
+ parser.accepts("csvFile", "File to write a CSV version of the benchmark data.")
+ .withOptionalArg().ofType(File.class);
+ coldSyncInterval = parser.accepts("coldSyncInterval", "interval between sync cycles in sec (Segment-Tar-Cold only)")
+ .withRequiredArg().ofType(Integer.class).defaultsTo(5);
+ coldUseDataStore = parser
+ .accepts("useDataStore",
+ "Whether to use a datastore in the cold standby topology (Segment-Tar-Cold only)")
+ .withOptionalArg().ofType(Boolean.class)
+ .defaultsTo(Boolean.TRUE);
+ coldShareDataStore = parser
+ .accepts("shareDataStore",
+ "Whether to share the datastore for primary and standby in the cold standby topology (Segment-Tar-Cold only)")
+ .withOptionalArg().ofType(Boolean.class)
+ .defaultsTo(Boolean.FALSE);
+ coldOneShotRun = parser
+ .accepts("oneShotRun",
+ "Whether to do a continuous sync between client and server or sync only once (Segment-Tar-Cold only)")
+ .withOptionalArg().ofType(Boolean.class)
+ .defaultsTo(Boolean.TRUE);
+ coldSecure = parser
+ .accepts("secure",
+ "Whether to enable secure communication between primary and standby in the cold standby topology (Segment-Tar-Cold only)")
+ .withOptionalArg().ofType(Boolean.class)
+ .defaultsTo(Boolean.FALSE);
+
+ help = parser.acceptsAll(asList("h", "?", "help"), "show help").forHelp();
+ nonOption = parser.nonOptions();
+
+
+ }
+
+}
+
+
+