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();
+
+
+    }
+
+}
+
+
+