diff --git a/oak-benchmarks/README.md b/oak-benchmarks/README.md index 1a48caee84..2018b668cf 100644 --- a/oak-benchmarks/README.md +++ b/oak-benchmarks/README.md @@ -33,6 +33,7 @@ The following benchmark options (with default values) are currently supported: --itemsToRead 1000 - Number of items to read --report false - Whether to output intermediate results --csvFile - Optional csv file to report the benchmark results + --consoleFormat - Console output format. Possible values: 'machine-readable', 'prettyprint'. Defaults to 'prettyprint' --concurrency - Comma separated list of concurrency levels --metrics false - Enable metrics based stats collection --rdbjdbcuri - JDBC URL for RDB persistence (defaults to local file-based H2) diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AbstractTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AbstractTest.java index 5497128871..0290ee07f5 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AbstractTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AbstractTest.java @@ -46,6 +46,8 @@ import org.apache.jackrabbit.oak.spi.security.authentication.SystemSubject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + /** * Abstract base class for individual performance benchmarks. */ @@ -91,10 +93,11 @@ public abstract class AbstractTest extends Benchmark implements CSVResultGene private Profiler profiler; - private PrintStream out; - private RepositoryFixture currentFixture; + private BenchmarkOutputStrategy outputStrategy = new PrettyPrintConsoleStrategy(this); + private BenchmarkOutputStrategy csvStrategy = null; + /** *

* used to signal the {@link #runTest(int)} if stop running future test planned or not. If set @@ -146,7 +149,9 @@ public abstract class AbstractTest extends Benchmark implements CSVResultGene @Override public void setPrintStream(PrintStream out) { - this.out = out; + if (out != null) { + this.csvStrategy = new CsvOutputStrategy(this, out); + } } protected static int getScale(int def) { @@ -188,13 +193,9 @@ public abstract class AbstractTest extends Benchmark implements CSVResultGene @Override public void run(Iterable fixtures, List concurrencyLevels) { - System.out.format( - "# %-26.26s C min 10%% 50%% 90%% max N%s%n", - toString(), statsNamesJoined(false)); - if (out != null) { - out.format( - "# %-26.26s, C, min, 10%%, 50%%, 90%%, max, N%s%n", - toString(), statsNamesJoined(true)); + outputStrategy.printHeader(); + if (this.csvStrategy != null) { + csvStrategy.printHeader(); } for (RepositoryFixture fixture : fixtures) { currentFixture = fixture; @@ -252,13 +253,9 @@ public abstract class AbstractTest extends Benchmark implements CSVResultGene statsArg = ArrayUtils.add(statsArg, comment); } if (statistics.getN() > 0) { - System.out.format( - "%-28.28s %6d %6.0f %6.0f %6.0f %6.0f %6.0f %6d"+statsFormatsJoined(false)+"%n", - statsArg); - if (out != null) { - out.format( - "%-28.28s, %6d, %6.0f, %6.0f, %6.0f, %6.0f, %6.0f, %6d"+statsFormatsJoined(false)+"%n", - statsArg); + outputStrategy.printStats(statsArg); + if (this.csvStrategy != null) { + this.csvStrategy.printStats(statsArg); } } @@ -268,26 +265,6 @@ public abstract class AbstractTest extends Benchmark implements CSVResultGene } } - private String statsFormatsJoined(boolean commaSeparated) { - String comment = comment(); - String[] formatPattern = statsFormats(); - if (comment != null){ - String commentPattern = commaSeparated ? "#%s" : " #%s"; - formatPattern = (String[])ArrayUtils.add(formatPattern, commentPattern); - } - Joiner joiner = commaSeparated ? Joiner.on(',') : Joiner.on(" "); - return joiner.join(formatPattern); - } - - private String statsNamesJoined(boolean commaSeparated) { - Joiner joiner = commaSeparated ? Joiner.on(',') : Joiner.on(" "); - String names = joiner.join(statsNames()); - if (!commaSeparated) { - names = " " + names; - } - return names; - } - private class Executor extends Thread { private final SynchronizedDescriptiveStatistics statistics; @@ -375,6 +352,8 @@ public abstract class AbstractTest extends Benchmark implements CSVResultGene beforeTest(); try { long start = System.currentTimeMillis(); + // for those who might want to uncomment this + // please use FilterPrinter.println_verbose so we can switch between printing everything and only stats // System.out.println("execute " + this); runTest(); return System.currentTimeMillis() - start; @@ -391,6 +370,8 @@ public abstract class AbstractTest extends Benchmark implements CSVResultGene beforeTest(executionContext); try { long start = System.currentTimeMillis(); + // for those who might want to uncomment this + // please use FilterPrinter.println_verbose so we can switch between printing everything and only stats // System.out.println("execute " + this); runTest(executionContext); return System.currentTimeMillis() - start; @@ -412,7 +393,7 @@ public abstract class AbstractTest extends Benchmark implements CSVResultGene } if (profiler != null) { - System.out.println(profiler.stopCollecting().getTop(5)); + println_verbose(profiler.stopCollecting().getTop(5)); profiler = null; } @@ -430,6 +411,10 @@ public abstract class AbstractTest extends Benchmark implements CSVResultGene this.repository = null; } + public void setOutputStrategy(BenchmarkOutputStrategy outputStrategy) { + this.outputStrategy = outputStrategy; + } + /** * Names of additional stats which benchmark wants to be reported as part of * default report. Add required padding to the names to account for stats value diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddMembersTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddMembersTest.java index c237118c1b..91062b6114 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddMembersTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/AddMembersTest.java @@ -43,6 +43,8 @@ import org.apache.jackrabbit.oak.spi.xml.ImportBehavior; import org.apache.jackrabbit.oak.spi.xml.ProtectedItemImporter; import org.apache.jackrabbit.util.Text; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + /** * Test the performance of adding a configured number of members to groups. The * following parameters can be used to run the benchmark: @@ -94,7 +96,7 @@ public class AddMembersTest extends AbstractTest { s.save(); s.logout(); } - System.out.println("setup done"); + println_verbose("setup done"); } protected void createUsers(@Nonnull UserManager userManager) throws Exception { diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkOutputStrategy.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkOutputStrategy.java new file mode 100644 index 0000000000..232132dacb --- /dev/null +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkOutputStrategy.java @@ -0,0 +1,34 @@ +/* + * 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.benchmark; + +/** + * Defines interface for benchmark stats output strategy. + */ +public interface BenchmarkOutputStrategy { + + /** + * Method prints header of stats. For example column names. + */ + void printHeader(); + + /** + * Method to print benchmark stats. + * @param stats benchmark stats. + */ + void printStats(Object[] stats); +} diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java index a8f232f2cb..d4edd35566 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java @@ -47,6 +47,7 @@ import org.apache.jackrabbit.oak.benchmark.authentication.external.PrincipalName import org.apache.jackrabbit.oak.benchmark.authentication.external.SyncAllExternalUsersTest; import org.apache.jackrabbit.oak.benchmark.authentication.external.SyncExternalUsersTest; import org.apache.jackrabbit.oak.benchmark.authorization.AceCreationTest; +import org.apache.jackrabbit.oak.benchmark.util.FilterPrinter; import org.apache.jackrabbit.oak.benchmark.wikipedia.WikipediaImport; import org.apache.jackrabbit.oak.fixture.JackrabbitRepositoryFixture; import org.apache.jackrabbit.oak.fixture.OakFixture; @@ -145,6 +146,9 @@ public class BenchmarkRunner { OptionSpec randomUser = parser.accepts("randomUser", "Whether to use a random user to read.") .withOptionalArg().ofType(Boolean.class) .defaultsTo(Boolean.FALSE); + OptionSpec consoleFormat = parser.accepts("consoleFormat", "Format of console output. Possible values are 'prettyprint' and 'machine-readable'") + .withOptionalArg().ofType(String.class) + .defaultsTo("prettyprint"); OptionSpec csvFile = parser.accepts("csvFile", "File to write a CSV version of the benchmark data.") .withOptionalArg().ofType(File.class); OptionSpec flatStructure = parser.accepts("flatStructure", "Whether the test should use a flat structure or not.") @@ -197,7 +201,6 @@ public class BenchmarkRunner { .withOptionalArg().ofType(Boolean.class) .defaultsTo(Boolean.FALSE); - OptionSpec verbose = parser.accepts("verbose", "Enable verbose output"); OptionSpec nonOption = parser.nonOptions(); OptionSpec help = parser.acceptsAll(asList("h", "?", "help"), "show help").forHelp(); OptionSet options = parser.parse(args); @@ -255,6 +258,8 @@ public class BenchmarkRunner { OakRepositoryFixture.getCompositeMemoryStore(mounts.value(options), pathsPerMount.value(options)) }; + FilterPrinter.setVerbose(report.value(options)); + Benchmark[] allBenchmarks = new Benchmark[] { new OrderedIndexQueryOrderedIndexTest(), new OrderedIndexQueryStandardIndexTest(), @@ -315,10 +320,10 @@ public class BenchmarkRunner { new TransientManyChildNodesTest(), new WikipediaImport( wikipedia.value(options), - flatStructure.value(options), - report.value(options)), + flatStructure.value(options) + ), new CreateNodesBenchmark(), - new ManyNodes(options.has(verbose)), + new ManyNodes(), new ObservationTest(), new RevisionGCTest(), new ContinuousRevisionGCTest(), @@ -326,8 +331,8 @@ public class BenchmarkRunner { new FlatTreeWithAceForSamePrincipalTest(), new ReadDeepTreeTest( runAsAdmin.value(options), - itemsToRead.value(options), - report.value(options)), + itemsToRead.value(options) + ), new CompositeAuthorizationTest( runAsAdmin.value(options), itemsToRead.value(options)), // NOTE: this is currently the no of configurations @@ -343,46 +348,43 @@ public class BenchmarkRunner { reverseOrder.value(options)), new ConcurrentReadDeepTreeTest( runAsAdmin.value(options), - itemsToRead.value(options), - report.value(options)), + itemsToRead.value(options) + ), new ConcurrentReadSinglePolicyTreeTest( runAsAdmin.value(options), - itemsToRead.value(options), - report.value(options)), + itemsToRead.value(options) + ), new ConcurrentReadAccessControlledTreeTest( runAsAdmin.value(options), - itemsToRead.value(options), - report.value(options)), + itemsToRead.value(options) + ), new ConcurrentReadAccessControlledTreeTest2( runAsAdmin.value(options), - itemsToRead.value(options), - report.value(options)), + itemsToRead.value(options) + ), new ConcurrentReadRandomNodeAndItsPropertiesTest( runAsAdmin.value(options), - itemsToRead.value(options), - report.value(options)), + itemsToRead.value(options) + ), new ConcurrentHasPermissionTest( runAsAdmin.value(options), - itemsToRead.value(options), - report.value(options)), + itemsToRead.value(options) + ), new ConcurrentHasPermissionTest2( runAsAdmin.value(options), - itemsToRead.value(options), - report.value(options)), + itemsToRead.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)), @@ -461,20 +463,21 @@ public class BenchmarkRunner { new FullTextSearchTest( wikipedia.value(options), flatStructure.value(options), - report.value(options), withStorage.value(options)), + withStorage.value(options)), new FullTextSolrSearchTest( wikipedia.value(options), flatStructure.value(options), - report.value(options), withStorage.value(options), withServer.value(options)), + withStorage.value(options), withServer.value(options)), new FindAuthorizableWithScopeTest(numberOfUsers.value(options), setScope.value(options)), + //TODO: test LucenePropertyFullTextTest output since it still may put extra output into console through logger new LucenePropertyFullTextTest( wikipedia.value(options), flatStructure.value(options), - report.value(options), withStorage.value(options)), + withStorage.value(options)), new LucenePropertyFTSeparated( wikipedia.value(options), flatStructure.value(options), - report.value(options), withStorage.value(options)), + withStorage.value(options)), new ReplicaCrashResilienceTest(), // benchmarks for oak-auth-external @@ -523,6 +526,13 @@ public class BenchmarkRunner { out = new PrintStream(FileUtils.openOutputStream(csvFile.value(options), true)); } for (Benchmark benchmark : benchmarks) { + if (benchmark instanceof AbstractTest) { + if (consoleFormat.value(options).equalsIgnoreCase("prettyprint")) { + ((AbstractTest) benchmark).setOutputStrategy(new PrettyPrintConsoleStrategy((AbstractTest) benchmark)); + } else if (consoleFormat.value(options).equalsIgnoreCase("machine-readable")){ + ((AbstractTest) benchmark).setOutputStrategy(new MachineReadableConsoleStrategy((AbstractTest) benchmark)); + } + } if (benchmark instanceof CSVResultGenerator) { ((CSVResultGenerator) benchmark).setPrintStream(out); } diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BundlingNodeTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BundlingNodeTest.java index 422f1ef12b..0202a9838f 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BundlingNodeTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/BundlingNodeTest.java @@ -63,6 +63,7 @@ import static org.apache.jackrabbit.JcrConstants.NT_FOLDER; import static org.apache.jackrabbit.JcrConstants.NT_RESOURCE; import static org.apache.jackrabbit.commons.JcrUtils.getOrAddNode; import static org.apache.jackrabbit.oak.api.Type.STRINGS; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.printf_verbose; import static org.apache.jackrabbit.oak.plugins.document.bundlor.BundlingConfigHandler.BUNDLOR; import static org.apache.jackrabbit.oak.plugins.document.bundlor.BundlingConfigHandler.DOCUMENT_NODE_STORE; import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.DECLARING_NODE_TYPES; @@ -216,7 +217,7 @@ public class BundlingNodeTest extends AbstractTest @Override protected void afterSuite() throws Exception { - System.out.printf("bundlingEnabled: %s, oakResourceEnabled: %s, readerEnabled: %s, bundlingMode: %s%n", + printf_verbose("bundlingEnabled: %s, oakResourceEnabled: %s, readerEnabled: %s, bundlingMode: %s%n", bundlingEnabled, oakResourceEnabled, readerEnabled, bundlingMode); } diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CompositeAuthorizationTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CompositeAuthorizationTest.java index b32e1e14fa..9666527f17 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CompositeAuthorizationTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CompositeAuthorizationTest.java @@ -70,7 +70,7 @@ public class CompositeAuthorizationTest extends ReadDeepTreeTest { private int cnt; protected CompositeAuthorizationTest(boolean runAsAdmin, int cntConfigurations) { - super(runAsAdmin, 1000, false); + super(runAsAdmin, 1000); cnt = cntConfigurations; } diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentCreateNodesTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentCreateNodesTest.java index efa9919c22..6d8b055011 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentCreateNodesTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentCreateNodesTest.java @@ -42,6 +42,7 @@ import static javax.jcr.observation.Event.PERSIST; import static javax.jcr.observation.Event.PROPERTY_ADDED; import static javax.jcr.observation.Event.PROPERTY_CHANGED; import static javax.jcr.observation.Event.PROPERTY_REMOVED; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; public class ConcurrentCreateNodesTest extends AbstractTest { @@ -56,7 +57,6 @@ public class ConcurrentCreateNodesTest extends AbstractTest { private static final int NODE_COUNT_LEVEL2 = 50; private static final String NODE_TYPE = System.getProperty("nodeType", "nt:unstructured"); private static final boolean DISABLE_INDEX = Boolean.getBoolean("disableIndex"); - private static final boolean VERBOSE = Boolean.getBoolean("verbose"); private Writer writer; private final AtomicInteger NODE_COUNT = new AtomicInteger(); @@ -146,9 +146,9 @@ public class ConcurrentCreateNodesTest extends AbstractTest { } numNodes = NODE_COUNT.get() - numNodes; time = System.currentTimeMillis() - time; - if (this == writer && VERBOSE) { + if (this == writer) { long perSecond = numNodes * 1000 / time; - System.out.println("Created " + numNodes + " in " + time + " ms. (" + perSecond + " nodes/sec)"); + println_verbose("Created " + numNodes + " in " + time + " ms. (" + perSecond + " nodes/sec)"); } } catch (RepositoryException e) { e.printStackTrace(); diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentEveryoneACLTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentEveryoneACLTest.java index a9eedf89fb..43594976d4 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentEveryoneACLTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentEveryoneACLTest.java @@ -33,6 +33,8 @@ import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils import org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants; import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + /** * Test case that randomly reads from 10k unstructured nodes that are all access controlled with an everyone ACL. */ @@ -93,7 +95,7 @@ public class ConcurrentEveryoneACLTest extends AbstractTest { } }; v.visit(root); - System.out.println("Num ACEs: " + numACEs[0]); + println_verbose("Num ACEs: " + numACEs[0]); session.logout(); } diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentHasPermissionTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentHasPermissionTest.java index bdfd389350..267a35620e 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentHasPermissionTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentHasPermissionTest.java @@ -22,6 +22,8 @@ import javax.jcr.Session; import com.google.common.collect.ImmutableList; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + /** * Concurrently calls Session#hasPermission on the deep tree: * - the path argument a random path out of the deep tree @@ -42,8 +44,8 @@ public class ConcurrentHasPermissionTest extends ConcurrentReadDeepTreeTest { Session.ACTION_READ + "," + Session.ACTION_SET_PROPERTY ); - protected ConcurrentHasPermissionTest(boolean runAsAdmin, int itemsToRead, boolean doReport) { - super(runAsAdmin, itemsToRead, doReport); + protected ConcurrentHasPermissionTest(boolean runAsAdmin, int itemsToRead) { + super(runAsAdmin, itemsToRead); } protected void randomRead(Session testSession, List allPaths, int cnt) throws RepositoryException { @@ -70,9 +72,7 @@ public class ConcurrentHasPermissionTest extends ConcurrentReadDeepTreeTest { } } long end = System.currentTimeMillis(); - if (doReport) { - System.out.println("Session " + testSession.getUserID() + " calling #hasPermission (Allows: "+ allows +"; Denies: "+ denies +") completed in " + (end - start)); - } + println_verbose("Session " + testSession.getUserID() + " calling #hasPermission (Allows: "+ allows +"; Denies: "+ denies +") completed in " + (end - start)); } finally { if (logout) { logout(testSession); diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentHasPermissionTest2.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentHasPermissionTest2.java index 9a5309fec3..2e907b2aaa 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentHasPermissionTest2.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentHasPermissionTest2.java @@ -41,8 +41,8 @@ public class ConcurrentHasPermissionTest2 extends ConcurrentHasPermissionTest { int counter = 0; final List principals = new ArrayList(); - public ConcurrentHasPermissionTest2(boolean runAsAdmin, int itemsToRead, boolean doReport) { - super(runAsAdmin, itemsToRead, doReport); + public ConcurrentHasPermissionTest2(boolean runAsAdmin, int itemsToRead) { + super(runAsAdmin, itemsToRead); } @Override diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest.java index 7e67ac1e2e..c67ab431ba 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest.java @@ -32,8 +32,8 @@ public class ConcurrentReadAccessControlledTreeTest extends ConcurrentReadDeepTr int counter = 0; public ConcurrentReadAccessControlledTreeTest( - boolean runAsAdmin, int itemsToRead, boolean doReport) { - super(runAsAdmin, itemsToRead, doReport); + boolean runAsAdmin, int itemsToRead) { + super(runAsAdmin, itemsToRead); } @Override diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest2.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest2.java index 7abc7ebd6a..82ac40ac82 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest2.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadAccessControlledTreeTest2.java @@ -38,8 +38,8 @@ public class ConcurrentReadAccessControlledTreeTest2 extends ConcurrentReadDeepT int counter = 0; final List principals = new ArrayList(); - public ConcurrentReadAccessControlledTreeTest2(boolean runAsAdmin, int itemsToRead, boolean doReport) { - super(runAsAdmin, itemsToRead, doReport); + public ConcurrentReadAccessControlledTreeTest2(boolean runAsAdmin, int itemsToRead) { + super(runAsAdmin, itemsToRead); } @Override diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadDeepTreeTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadDeepTreeTest.java index 5ef8296a52..3e859924da 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadDeepTreeTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadDeepTreeTest.java @@ -21,8 +21,8 @@ package org.apache.jackrabbit.oak.benchmark; */ public class ConcurrentReadDeepTreeTest extends ReadDeepTreeTest { - public ConcurrentReadDeepTreeTest(boolean runAsAdmin, int itemsToRead, boolean doReport) { - super(runAsAdmin, itemsToRead, doReport); + public ConcurrentReadDeepTreeTest(boolean runAsAdmin, int itemsToRead) { + super(runAsAdmin, itemsToRead); } } diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadRandomNodeAndItsPropertiesTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadRandomNodeAndItsPropertiesTest.java index 22692ecade..b4562d5d25 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadRandomNodeAndItsPropertiesTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadRandomNodeAndItsPropertiesTest.java @@ -24,13 +24,15 @@ import javax.jcr.PropertyIterator; import javax.jcr.RepositoryException; import javax.jcr.Session; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + /** * Concurrently reads random nodes and it's properties from the deep tree. */ public class ConcurrentReadRandomNodeAndItsPropertiesTest extends ReadDeepTreeTest { - public ConcurrentReadRandomNodeAndItsPropertiesTest(boolean runAsAdmin, int itemsToRead, boolean doReport) { - super(runAsAdmin, itemsToRead, doReport); + public ConcurrentReadRandomNodeAndItsPropertiesTest(boolean runAsAdmin, int itemsToRead) { + super(runAsAdmin, itemsToRead); } protected void visitingProperty(Property property, int i) throws RepositoryException { @@ -69,9 +71,7 @@ public class ConcurrentReadRandomNodeAndItsPropertiesTest extends ReadDeepTreeTe } } long end = System.currentTimeMillis(); - if (doReport) { - System.out.println("Session " + testSession.getUserID() + " reading " + (cnt-noAccess) + " (Nodes: "+ nodeCnt +"; Properties: "+propertyCnt+") completed in " + (end - start)); - } + println_verbose("Session " + testSession.getUserID() + " reading " + (cnt-noAccess) + " (Nodes: "+ nodeCnt +"; Properties: "+propertyCnt+") completed in " + (end - start)); } finally { if (logout) { logout(testSession); diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadSinglePolicyTreeTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadSinglePolicyTreeTest.java index 99dce4ea8d..1ff041d37f 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadSinglePolicyTreeTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentReadSinglePolicyTreeTest.java @@ -33,8 +33,8 @@ import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal; public class ConcurrentReadSinglePolicyTreeTest extends ConcurrentReadDeepTreeTest { public ConcurrentReadSinglePolicyTreeTest( - boolean runAsAdmin, int itemsToRead, boolean doReport) { - super(runAsAdmin, itemsToRead, doReport); + boolean runAsAdmin, int itemsToRead) { + super(runAsAdmin, itemsToRead); } @Override diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentTraversalTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentTraversalTest.java index 51eae8ebfc..6ba12604ba 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentTraversalTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentTraversalTest.java @@ -23,6 +23,8 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.util.TraversingItemVisitor; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + /** * Concurrently reads random items from the deep tree and traverses the the * subtree until {@code MAX_LEVEL} is reached, which is currently set to 10. @@ -32,8 +34,8 @@ public class ConcurrentTraversalTest extends ManyUserReadTest { /* number of levels to traverse */ private static final int MAX_LEVEL = 10; - protected ConcurrentTraversalTest(boolean runAsAdmin, int itemsToRead, boolean doReport, boolean randomUser) { - super(runAsAdmin, itemsToRead, doReport, randomUser); + protected ConcurrentTraversalTest(boolean runAsAdmin, int itemsToRead, boolean randomUser) { + super(runAsAdmin, itemsToRead, randomUser); } @Override @@ -68,9 +70,7 @@ public class ConcurrentTraversalTest extends ManyUserReadTest { } } long end = System.currentTimeMillis(); - if (doReport) { - System.out.println("Session " + testSession.getUserID() + " reading " + (cnt-noAccess) + " (Nodes: "+ nodeCnt +"; Properties: "+propertyCnt+") completed in " + (end - start)); - } + println_verbose("Session " + testSession.getUserID() + " reading " + (cnt-noAccess) + " (Nodes: "+ nodeCnt +"; Properties: "+propertyCnt+") completed in " + (end - start)); } finally { if (logout) { logout(testSession); diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentWriteACLTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentWriteACLTest.java index d2b901ef12..791607f88c 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentWriteACLTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ConcurrentWriteACLTest.java @@ -31,6 +31,8 @@ import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils import org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants; import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.printf_verbose; + /** * Test case that traverses 10k unstructured nodes (100x100) while 50 concurrent * readers randomly access nodes from within this tree. @@ -101,7 +103,7 @@ public class ConcurrentWriteACLTest extends AbstractTest { session.save(); } } catch (InvalidItemStateException e) { - System.out.printf("error: %s%n", e); + printf_verbose("error: %s%n", e); // ignore } finally { if (session != null) { diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ContinuousRevisionGCTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ContinuousRevisionGCTest.java index 4d3dd4f7f2..54cc5c1a3b 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ContinuousRevisionGCTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ContinuousRevisionGCTest.java @@ -27,6 +27,8 @@ import com.google.common.base.Stopwatch; import org.apache.jackrabbit.oak.spi.state.NodeStore; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + /** * Similar to {@link RevisionGCTest} but runs continuously and performs * periodic RevisionGC (every 10 seconds). @@ -44,7 +46,7 @@ public class ContinuousRevisionGCTest extends RevisionGCTest { Stopwatch sw = Stopwatch.createStarted(); String result = revisionGC(nodeStore); sw.stop(); - System.out.println("\nPerformed RevisionGC in " + sw + " (" + result + ")"); + println_verbose("\nPerformed RevisionGC in " + sw + " (" + result + ")"); } } @@ -60,7 +62,7 @@ public class ContinuousRevisionGCTest extends RevisionGCTest { public void run() { Random rand = new Random(); try { - System.out.print("Creating garbage "); + println_verbose("Creating garbage "); for (int i = 0; ; i++) { Node n = s.getRootNode().addNode("node-" + i); for (int j = 0; j < 1000; j++) { @@ -71,7 +73,7 @@ public class ContinuousRevisionGCTest extends RevisionGCTest { n.remove(); s.save(); } - System.out.print("."); + println_verbose("."); } } catch (Exception e) { throw new RuntimeException(e); diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CreateNodesBenchmark.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CreateNodesBenchmark.java index 56812a6f5f..d0dfd59137 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CreateNodesBenchmark.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CreateNodesBenchmark.java @@ -28,6 +28,8 @@ import javax.jcr.SimpleCredentials; import org.apache.jackrabbit.oak.fixture.RepositoryFixture; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.format_verbose; + /** * Creates approximately 100k nodes (breadth first, save every 10 nodes). */ @@ -37,7 +39,7 @@ public class CreateNodesBenchmark extends Benchmark { public void run(Iterable fixtures) { for (RepositoryFixture fixture : fixtures) { if (fixture.isAvailable(1)) { - System.out.format("%s: Create nodes benchmark%n", fixture); + format_verbose("%s: Create nodes benchmark%n", fixture); try { Repository[] cluster = fixture.setUpCluster(1); try { @@ -60,7 +62,7 @@ public class CreateNodesBenchmark extends Benchmark { Node testRoot = session.getRootNode().addNode("r" + AbstractTest.TEST_ID); createNodes(testRoot, 20, 6, count, startTime); long duration = System.currentTimeMillis() - startTime; - System.out.format( + format_verbose( "Created %d nodes in %d seconds (%.2fms/node)%n", count.get(), duration / 1000, (double) duration / count.get()); } @@ -74,7 +76,7 @@ public class CreateNodesBenchmark extends Benchmark { nodes.add(n.addNode("folder-" + i, "nt:folder")); if (count.incrementAndGet() % 1000 == 0) { long duration = System.currentTimeMillis() - startTime; - System.out.format( + format_verbose( "Created %d nodes in %d seconds (%.2fms/node)...%n", count.get(), duration / 1000, (double) duration / count.get()); diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CsvOutputStrategy.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CsvOutputStrategy.java new file mode 100644 index 0000000000..67ecec0655 --- /dev/null +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CsvOutputStrategy.java @@ -0,0 +1,60 @@ +/* + * 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.benchmark; + +import com.google.common.base.Joiner; +import org.apache.commons.lang.ArrayUtils; + +import java.io.PrintStream; + +//TODO: fix csv output - compare with base revision +public class CsvOutputStrategy implements BenchmarkOutputStrategy { + private AbstractTest test; + private PrintStream out; + + public CsvOutputStrategy(AbstractTest test, PrintStream out) { + this.test = test; + this.out = out; + } + + private String getStatsNamesJoined() { + return Joiner.on(',').join(test.statsNames()); + } + + private String getStatsFormatsJoined() { + String comment = test.comment(); + String[] formatPattern = test.statsFormats(); + if (comment != null){ + String commentPattern = "#%s"; + formatPattern = (String[]) ArrayUtils.add(formatPattern, commentPattern); + } + return formatPattern.length > 0 ? Joiner.on(',').join(formatPattern) : null; + } + + @Override + public void printHeader() { + this.out.format( + "# %-26.26s, C, min, 10%%, 50%%, 90%%, max, N%s%n", + test.toString(), getStatsNamesJoined()); + } + + @Override + public void printStats(Object[] stats) { + String concatenatedFormat = Joiner.on(',').skipNulls().join("%-28.28s, %6d, %6.0f, %6.0f, %6.0f, %6.0f, %6.0f, %6d", getStatsFormatsJoined(), "%n"); + this.out.format(concatenatedFormat, stats); + } +} diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CugOakTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CugOakTest.java index 76872c5ab4..54e69c34ef 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CugOakTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CugOakTest.java @@ -36,6 +36,8 @@ import org.apache.jackrabbit.oak.fixture.RepositoryFixture; import org.apache.jackrabbit.oak.jcr.Jcr; import org.apache.jackrabbit.oak.plugins.tree.TreeLocation; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + /** * Test the effect of multiple authorization configurations on the general read * operations. @@ -125,9 +127,7 @@ public class CugOakTest extends CugTest { } } long end = System.currentTimeMillis(); - if (doReport) { - System.out.println("ContentSession " + cs.getAuthInfo().getUserID() + " reading " + (itemsToRead - noAccess) + " (Tree: " + nodeCnt + "; PropertyState: " + propertyCnt + ") completed in " + (end - start)); - } + println_verbose("ContentSession " + cs.getAuthInfo().getUserID() + " reading " + (itemsToRead - noAccess) + " (Tree: " + nodeCnt + "; PropertyState: " + propertyCnt + ") completed in " + (end - start)); } finally { if (logout) { readSession.close(); diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CugTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CugTest.java index a0f9837d71..7db7cbe571 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CugTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/CugTest.java @@ -46,7 +46,7 @@ public class CugTest extends ReadDeepTreeTest { private final boolean reverseOrder; protected CugTest(boolean runAsAdmin, int itemsToRead, boolean singleSession, @Nonnull List supportedPaths, boolean reverseOrder) { - super(runAsAdmin, itemsToRead, false, singleSession); + super(runAsAdmin, itemsToRead, singleSession); this.params = ConfigurationParameters.of(AuthorizationConfiguration.NAME, ConfigurationParameters.of( "cugSupportedPaths", supportedPaths.toArray(new String[supportedPaths.size()]), "cugEnabled", true)); diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/FlatTreeUpdateTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/FlatTreeUpdateTest.java index 38ec4bbd7c..229ddef9f7 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/FlatTreeUpdateTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/FlatTreeUpdateTest.java @@ -20,6 +20,8 @@ import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.Session; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + /** * Benchmark for OAK-1866 */ @@ -34,13 +36,13 @@ public class FlatTreeUpdateTest extends AbstractTest { @Override public void beforeSuite() throws RepositoryException { session = loginWriter(); - System.out.println("start"); + println_verbose("start"); Node node = session.getRootNode().addNode(ROOT_NODE_NAME, "oak:Unstructured"); for (int i = 0; i < CHILD_COUNT; i++) { node.addNode("node" + i, "oak:Unstructured"); } session.save(); - System.out.println("end"); + println_verbose("end"); } @Override diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/FlatTreeWithAceForSamePrincipalTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/FlatTreeWithAceForSamePrincipalTest.java index 098b851c0a..3030a1db21 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/FlatTreeWithAceForSamePrincipalTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/FlatTreeWithAceForSamePrincipalTest.java @@ -29,6 +29,8 @@ import org.apache.jackrabbit.api.security.user.UserManager; import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils; import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + public class FlatTreeWithAceForSamePrincipalTest extends AbstractTest { private static final String TEST_USER_ID = "test" + TEST_ID; @@ -66,7 +68,7 @@ public class FlatTreeWithAceForSamePrincipalTest extends AbstractTest { reader = login(new SimpleCredentials(TEST_USER_ID, TEST_USER_ID.toCharArray())); long end = System.currentTimeMillis(); - System.out.println("setup time " + (end - start)); + println_verbose("setup time " + (end - start)); } @Override diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/FullTextSearchTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/FullTextSearchTest.java index 5be07db90a..35bdfceba0 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/FullTextSearchTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/FullTextSearchTest.java @@ -88,8 +88,8 @@ public class FullTextSearchTest extends AbstractTest { if (indexCopierDir != null) { FileUtils.deleteDirectory(indexCopierDir); } - System.out.printf("numOfIndexes: %d, refreshDeltaMillis: %d, asyncInterval: %d, queueSize: %d , " + + printf_verbose("numOfIndexes: %d, refreshDeltaMillis: %d, asyncInterval: %d, queueSize: %d , " + "hybridIndexEnabled: %s, indexingMode: %s, useOakCodec: %s, cleanerIntervalInSecs: %d, " + "syncIndexing: %s %n", numOfIndexes, refreshDeltaMillis, asyncInterval, queueSize, hybridIndexEnabled, @@ -414,10 +416,10 @@ public class HybridIndexTest extends AbstractTest { private void dumpStats() { IndexStatsMBean indexStats = WhiteboardUtils.getService(whiteboard, IndexStatsMBean.class); - System.out.println(indexStats.getConsolidatedExecutionStats()); + println_verbose(indexStats.getConsolidatedExecutionStats()); String queueSize = Arrays.toString(statsProvider.getStats().getTimeSeries("HYBRID_QUEUE_SIZE", false) .getValuePerSecond()); - System.out.println("Queue size - " + queueSize); + println_verbose("Queue size - " + queueSize); } @SuppressWarnings("ResultOfMethodCallIgnored") diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/IsMemberTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/IsMemberTest.java index 42e86df47a..1c48e7099a 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/IsMemberTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/IsMemberTest.java @@ -43,6 +43,8 @@ import org.apache.jackrabbit.oak.spi.xml.ImportBehavior; import org.apache.jackrabbit.oak.spi.xml.ProtectedItemImporter; import org.apache.jackrabbit.util.Text; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + /** * Benchmark for {@link Group#isMember(Authorizable)} with the following setup: * - 10 groups @@ -110,7 +112,7 @@ public class IsMemberTest extends AbstractTest { s.save(); s.logout(); } - System.out.println("setup done"); + println_verbose("setup done"); } @Override @@ -165,7 +167,7 @@ public class IsMemberTest extends AbstractTest { //System.out.println(USER + i + " is " + (isMember? "" : "not ")+ "member of " +groupId); } } catch (RepositoryException e) { - System.out.println(e.getMessage()); + println_verbose(e.getMessage()); } finally { if (s != null) { s.logout(); diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/LoginWithTokensTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/LoginWithTokensTest.java index 847d0ecc14..9da75b87af 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/LoginWithTokensTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/LoginWithTokensTest.java @@ -34,6 +34,8 @@ import org.apache.jackrabbit.oak.spi.security.authentication.token.TokenProvider import org.apache.jackrabbit.oak.spi.security.principal.PrincipalImpl; import org.apache.jackrabbit.util.Text; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + /** * Measure impact of synchronous token cleanup on the repository login with * tokens over multiple users. Concurrency can be set via the benchmark runner. @@ -91,7 +93,7 @@ public class LoginWithTokensTest extends AbstractLoginTest { s.save(); s.logout(); } - System.out.println("setup done, created " + numberOfUsers + " users."); + println_verbose("setup done, created " + numberOfUsers + " users."); } @Override diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/LucenePropertyFTSeparated.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/LucenePropertyFTSeparated.java index 630d4feaae..b3f6d8519f 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/LucenePropertyFTSeparated.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/LucenePropertyFTSeparated.java @@ -41,9 +41,8 @@ public class LucenePropertyFTSeparated extends LucenePropertyFullTextTest { public LucenePropertyFTSeparated(final File dump, final boolean flat, - final boolean doReport, final Boolean storageEnabled) { - super(dump, flat, doReport, storageEnabled); + super(dump, flat, storageEnabled); currentTest = this.getClass().getSimpleName(); } diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/LucenePropertyFullTextTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/LucenePropertyFullTextTest.java index 36df33d830..8a493dd95d 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/LucenePropertyFullTextTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/LucenePropertyFullTextTest.java @@ -166,9 +166,8 @@ public class LucenePropertyFullTextTest extends AbstractTest 0 ? joiner.join(formatPattern) : null; + } + + @Override + public void printStats(Object[] stats) { + String concatenatedFormat = Joiner.on(",").skipNulls().join("%s,%s,%d,%.0f,%.0f,%.0f,%.0f,%.0f,%d", getStatsFormatsJoined()); + StringBuilder sb = new StringBuilder(); + Formatter formatter = new Formatter(sb); + formatter.format(concatenatedFormat, ArrayUtils.addAll(new Object[]{test.toString()}, stats)); + System.out.println(sb.toString().replaceAll(", *", ",")); + } +} diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyNodes.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyNodes.java index 38fbf6f2de..d8ba3c5d14 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyNodes.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyNodes.java @@ -24,18 +24,14 @@ import javax.jcr.SimpleCredentials; import org.apache.jackrabbit.oak.fixture.RepositoryFixture; -public class ManyNodes extends Benchmark { - - private final boolean verbose; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; - ManyNodes(boolean verbose) { - this.verbose = verbose; - } +public class ManyNodes extends Benchmark { @Override public void run(Iterable fixtures) { for (RepositoryFixture fixture : fixtures) { - System.out.println("ManyNodes test: " + fixture); + println_verbose("ManyNodes test: " + fixture); if (fixture.isAvailable(1)) { try { Repository[] cluster = fixture.setUpCluster(1); @@ -54,7 +50,7 @@ public class ManyNodes extends Benchmark { e.printStackTrace(); } } else { - System.out.println("- not available, skipping"); + println_verbose("- not available, skipping"); } } } @@ -76,9 +72,7 @@ public class ManyNodes extends Benchmark { session.save(); if (total % 10000 == 0) { long now = System.currentTimeMillis(); - if (verbose) { - System.out.println(total + " nodes in " + (now - time) + " ms"); - } + println_verbose(total + " nodes in " + (now - time) + " ms"); time = now; } } diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyUserReadTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyUserReadTest.java index 5b7e8afca6..436ab4cb59 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyUserReadTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyUserReadTest.java @@ -28,6 +28,8 @@ import org.apache.jackrabbit.api.security.user.UserManager; import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils; import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + /** * UserTest... TODO */ @@ -37,8 +39,8 @@ public class ManyUserReadTest extends ReadDeepTreeTest { private final int numberOfMembers = 10; private final boolean randomUser; - protected ManyUserReadTest(boolean runAsAdmin, int itemsToRead, boolean doReport, boolean randomUser) { - super(runAsAdmin, itemsToRead, doReport, !randomUser); + protected ManyUserReadTest(boolean runAsAdmin, int itemsToRead, boolean randomUser) { + super(runAsAdmin, itemsToRead, !randomUser); this.randomUser = randomUser; } @@ -72,7 +74,7 @@ public class ManyUserReadTest extends ReadDeepTreeTest { userNode.addNode("private").setProperty("prop", "value"); adminSession.save(); } - System.out.println("Setup "+numberOfUsers+" users"); + println_verbose("Setup "+numberOfUsers+" users"); for (int i = 0; i < numberOfUsers; i++) { Group g = (Group) userManager.getAuthorizable("group"+i); @@ -82,8 +84,8 @@ public class ManyUserReadTest extends ReadDeepTreeTest { adminSession.save(); } - System.out.println("Setup group membership ("+numberOfMembers+" members per group)"); - System.out.println("All Paths : " + allPaths.size()); + println_verbose("Setup group membership ("+numberOfMembers+" members per group)"); + println_verbose("All Paths : " + allPaths.size()); AccessControlUtils.denyAllToEveryone(adminSession, "/rep:security/rep:authorizables"); adminSession.save(); diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/MemberBaseTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/MemberBaseTest.java index 1392a46350..a7ceb52737 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/MemberBaseTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/MemberBaseTest.java @@ -45,6 +45,8 @@ import org.apache.jackrabbit.oak.spi.xml.ImportBehavior; import org.apache.jackrabbit.oak.spi.xml.ProtectedItemImporter; import org.apache.jackrabbit.util.Text; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + /** * Abstract test-base for the various membership related operations (isMember, isDeclaredMember, memberOf, declaredMemberOf) * with the following characteristics an config options: @@ -110,7 +112,7 @@ abstract class MemberBaseTest extends AbstractTest { s.save(); s.logout(); } - System.out.println("setup done"); + println_verbose("setup done"); } @Override @@ -148,7 +150,7 @@ abstract class MemberBaseTest extends AbstractTest { (User) uMgr.getAuthorizableByPath(memberPaths.get(random.nextInt(numberOfMembers)))); } } catch (RepositoryException e) { - System.out.println(e.getMessage()); + println_verbose(e.getMessage()); } finally { if (s != null) { s.logout(); diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ObservationTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ObservationTest.java index c1502f51c3..737cfff182 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ObservationTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ObservationTest.java @@ -26,6 +26,8 @@ import static javax.jcr.observation.Event.PERSIST; import static javax.jcr.observation.Event.PROPERTY_ADDED; import static javax.jcr.observation.Event.PROPERTY_CHANGED; import static javax.jcr.observation.Event.PROPERTY_REMOVED; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.format_verbose; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; import static org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getServices; import java.util.List; @@ -73,7 +75,7 @@ public class ObservationTest extends Benchmark { public void run(Iterable fixtures) { for (RepositoryFixture fixture : fixtures) { if (fixture.isAvailable(1)) { - System.out.format("%s: Observation throughput benchmark%n", fixture); + format_verbose("%s: Observation throughput benchmark%n", fixture); try { final AtomicReference whiteboardRef = new AtomicReference(); Repository[] cluster; @@ -107,7 +109,7 @@ public class ObservationTest extends Benchmark { try { observationThroughput(repository, whiteboard); } finally { - System.out.println("Time elapsed: " + (System.currentTimeMillis() - t0) + " ms"); + println_verbose("Time elapsed: " + (System.currentTimeMillis() - t0) + " ms"); session.logout(); } } @@ -136,7 +138,7 @@ public class ObservationTest extends Benchmark { } String pathFilter = PATH_FILTER == null ? path : PATH_FILTER; - System.out.println("Path filter for event listener: " + pathFilter); + println_verbose("Path filter for event listener: " + pathFilter); ExecutorService service = Executors.newFixedThreadPool(WRITER_COUNT); try { for (int k = 0; k < LISTENER_COUNT; k++) { @@ -185,7 +187,7 @@ public class ObservationTest extends Benchmark { })); } - System.out.println("ms #node nodes/s #event event/s event-ratio queue external"); + println_verbose("ms #node nodes/s #event event/s event-ratio queue external"); while (!isDone(createNodes) || (eventCount.get() / LISTENER_COUNT < nodeCount.get() * EVENTS_PER_NODE)) { long t0 = System.currentTimeMillis(); Thread.sleep(OUTPUT_RESOLUTION); @@ -198,7 +200,6 @@ public class ObservationTest extends Benchmark { double nps = (double) nc / t * 1000; double eps = (double) ec / t * 1000; double epn = (double) ec / nc / EVENTS_PER_NODE; - System.out.format( "%7d %7d %7.1f %7d %7.1f %7.2f %7d %7d%n", t, nc, nps, ec, eps, epn, ql[0], ql[1]); diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/PrettyPrintConsoleStrategy.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/PrettyPrintConsoleStrategy.java new file mode 100644 index 0000000000..4d3825bbd7 --- /dev/null +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/PrettyPrintConsoleStrategy.java @@ -0,0 +1,56 @@ +/* + * 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.benchmark; + +import com.google.common.base.Joiner; +import org.apache.commons.lang.ArrayUtils; + +public class PrettyPrintConsoleStrategy implements BenchmarkOutputStrategy { + private AbstractTest test; + + public PrettyPrintConsoleStrategy(AbstractTest test) { + this.test = test; + } + + @Override + public void printHeader() { + System.out.format( + "# %-26.26s C min 10%% 50%% 90%% max N%s%n", + test.toString(), getStatsNamesJoined()); + } + + private String getStatsNamesJoined() { + return Joiner.on(" ").join(test.statsNames()); + } + + private String getStatsFormatsJoined() { + String comment = test.comment(); + String[] formatPattern = test.statsFormats(); + if (comment != null){ + String commentPattern = " #%s"; + formatPattern = (String[]) ArrayUtils.add(formatPattern, commentPattern); + } + return Joiner.on(" ").join(formatPattern); + } + + @Override + public void printStats(Object[] stats) { + System.out.format( + "%-28.28s %6d %6.0f %6.0f %6.0f %6.0f %6.0f %6d"+getStatsFormatsJoined()+"%n", + stats); + } +} diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadDeepTreeTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadDeepTreeTest.java index 87284a6e37..3600f2ce61 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadDeepTreeTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadDeepTreeTest.java @@ -37,6 +37,8 @@ import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils import org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants; import org.apache.jackrabbit.util.Text; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + /** * Randomly read 1000 items from the deep tree. */ @@ -44,7 +46,6 @@ public class ReadDeepTreeTest extends AbstractTest { protected final boolean runAsAdmin; protected final int itemsToRead; - protected final boolean doReport; protected final boolean singleSession; @@ -55,14 +56,13 @@ public class ReadDeepTreeTest extends AbstractTest { protected List allPaths = new ArrayList(); - protected ReadDeepTreeTest(boolean runAsAdmin, int itemsToRead, boolean doReport) { - this(runAsAdmin, itemsToRead, doReport, true); + protected ReadDeepTreeTest(boolean runAsAdmin, int itemsToRead) { + this(runAsAdmin, itemsToRead, true); } - public ReadDeepTreeTest(boolean runAsAdmin, int itemsToRead, boolean doReport, boolean singleSession) { + public ReadDeepTreeTest(boolean runAsAdmin, int itemsToRead, boolean singleSession) { this.runAsAdmin = runAsAdmin; this.itemsToRead = itemsToRead; - this.doReport = doReport; this.singleSession = singleSession; } @@ -87,7 +87,7 @@ public class ReadDeepTreeTest extends AbstractTest { } else { testRoot = rn.getNode(testNodeName); } - System.out.println("Import deep tree: " + (System.currentTimeMillis()-start)); + println_verbose("Import deep tree: " + (System.currentTimeMillis()-start)); ItemVisitor v = new TraversingItemVisitor.Default() { @Override @@ -102,7 +102,7 @@ public class ReadDeepTreeTest extends AbstractTest { } }; v.visit(testRoot); - System.out.println("All paths: " + allPaths.size()); + println_verbose("All paths: " + allPaths.size()); } protected String getImportFileName() { @@ -160,9 +160,7 @@ public class ReadDeepTreeTest extends AbstractTest { } } long end = System.currentTimeMillis(); - if (doReport) { - System.out.println("Session " + testSession.getUserID() + " reading " + (cnt-noAccess) + " (Nodes: "+ nodeCnt +"; Properties: "+propertyCnt+") completed in " + (end - start)); - } + println_verbose("Session " + testSession.getUserID() + " reading " + (cnt-noAccess) + " (Nodes: "+ nodeCnt +"; Properties: "+propertyCnt+") completed in " + (end - start)); } finally { if (logout) { logout(testSession); diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadWithMembershipTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadWithMembershipTest.java index f192b8fbfc..0f226edc92 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadWithMembershipTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadWithMembershipTest.java @@ -47,8 +47,8 @@ public class ReadWithMembershipTest extends ReadDeepTreeTest { private final int membershipSize; private final int numberOfAces; - protected ReadWithMembershipTest(int itemsToRead, boolean doReport, int membershipSize, int numberOfAces) { - super(false, itemsToRead, doReport, false); + protected ReadWithMembershipTest(int itemsToRead, int membershipSize, int numberOfAces) { + super(false, itemsToRead, false); userId = "user-" + UUID.randomUUID(); this.membershipSize = membershipSize; this.numberOfAces = numberOfAces; diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/RemoveMembersTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/RemoveMembersTest.java index ae5bae14c4..2e65aeff49 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/RemoveMembersTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/RemoveMembersTest.java @@ -43,6 +43,8 @@ import org.apache.jackrabbit.oak.spi.xml.ImportBehavior; import org.apache.jackrabbit.oak.spi.xml.ProtectedItemImporter; import org.apache.jackrabbit.util.Text; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + /** * Test the performance of removing members from groups. The * following parameters can be used to run the benchmark: @@ -96,7 +98,7 @@ public class RemoveMembersTest extends AbstractTest { } finally { s.logout(); } - System.out.println("setup done"); + println_verbose("setup done"); } diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReplicaCrashResilienceTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReplicaCrashResilienceTest.java index 3327715d59..21d79a5d7c 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReplicaCrashResilienceTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/ReplicaCrashResilienceTest.java @@ -25,6 +25,9 @@ import javax.jcr.SimpleCredentials; import org.apache.jackrabbit.oak.fixture.RepositoryFixture; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.format_verbose; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + public class ReplicaCrashResilienceTest extends Benchmark { private static final String LEVEL2POINTER = "level2pointer"; @@ -36,7 +39,7 @@ public class ReplicaCrashResilienceTest extends Benchmark { public void run(Iterable fixtures) { for (RepositoryFixture fixture : fixtures) { if (fixture.isAvailable(1)) { - System.out.format("%s: ReplicaCrashResilienceTest%n", fixture); + format_verbose("%s: ReplicaCrashResilienceTest%n", fixture); try { Repository[] cluster = fixture.setUpCluster(1); try { @@ -53,7 +56,7 @@ public class ReplicaCrashResilienceTest extends Benchmark { } private void run(final Repository repository) throws Exception { - System.out.println("Setup..."); + println_verbose("Setup..."); try { Session session = repository.login( new SimpleCredentials("admin", "admin".toCharArray())); @@ -91,7 +94,7 @@ public class ReplicaCrashResilienceTest extends Benchmark { e1.printStackTrace(); System.exit(1); } - System.out.println("Writer: Test start."); + println_verbose("Writer: Test start."); while(true) { try{ final String level1 = String.valueOf(level1Pointer); @@ -106,15 +109,15 @@ public class ReplicaCrashResilienceTest extends Benchmark { level1Node = replicaCrashTestNode.getNode(level1); } else { level1Node = replicaCrashTestNode.addNode(level1); - System.out.println("Writer: Created level1 node: "+level1Node); + println_verbose("Writer: Created level1 node: "+level1Node); } Node level2Node = level1Node.addNode(level2); - System.out.println("Writer: Created level2 node: "+level2Node); + println_verbose("Writer: Created level2 node: "+level2Node); writerInfosNode.setProperty(LEVEL1POINTER, level1Pointer); writerInfosNode.setProperty(LEVEL2POINTER, level2Pointer); session.save(); } catch(com.google.common.util.concurrent.UncheckedExecutionException e) { - System.out.println("Got an UncheckedException (levels: "+level1Pointer+"/"+level2Pointer+") from the google cache probably: "+e); + println_verbose("Got an UncheckedException (levels: "+level1Pointer+"/"+level2Pointer+") from the google cache probably: "+e); try { Thread.sleep(500); } catch (InterruptedException e2) { @@ -135,7 +138,7 @@ public class ReplicaCrashResilienceTest extends Benchmark { }; Thread th1 = new Thread(writer); - System.out.println("Launching writer..."); + println_verbose("Launching writer..."); th1.start(); Runnable reader = new Runnable() { @@ -166,7 +169,7 @@ public class ReplicaCrashResilienceTest extends Benchmark { long myPointer = level1Pointer * 1000 + level2Pointer; long diff = writerPointer - myPointer; if (diff<100) { - System.out.println("Reader: Closer than 100, waiting...level1="+level1+", level2="+level2); + println_verbose("Reader: Closer than 100, waiting...level1="+level1+", level2="+level2); try { Thread.sleep(1000); } catch (InterruptedException e) { @@ -199,11 +202,11 @@ public class ReplicaCrashResilienceTest extends Benchmark { } else { // read it Node level2Node = level1Node.getNode(level2); - System.out.println("Reader: verified level1="+level1+", level2="+level2); + println_verbose("Reader: verified level1="+level1+", level2="+level2); } } catch(com.google.common.util.concurrent.UncheckedExecutionException e) { - System.out.println("Got an UncheckedException from the google cache probably: "+e); + println_verbose("Got an UncheckedException from the google cache probably: "+e); try { Thread.sleep(500); } catch (InterruptedException e2) { @@ -225,7 +228,7 @@ public class ReplicaCrashResilienceTest extends Benchmark { e1.printStackTrace(System.out); System.exit(1); } - System.out.println("Test start."); + println_verbose("Test start."); } }; @@ -233,7 +236,7 @@ public class ReplicaCrashResilienceTest extends Benchmark { Thread.sleep(1000); th2.start(); - System.out.println("Waiting for writer to finish..."); + println_verbose("Waiting for writer to finish..."); th1.join(); } } \ No newline at end of file diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/RevisionGCTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/RevisionGCTest.java index e72a2000bb..bb2ad950f6 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/RevisionGCTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/RevisionGCTest.java @@ -37,6 +37,10 @@ import org.apache.jackrabbit.oak.spi.state.NodeStore; import com.google.common.base.Stopwatch; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.format_verbose; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.print_verbose; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; + /** * A benchmark to run RevisionGC. */ @@ -54,7 +58,7 @@ public class RevisionGCTest extends Benchmark { public void run(Iterable fixtures) { for (RepositoryFixture fixture : fixtures) { if (fixture.isAvailable(1)) { - System.out.format("%s: RevisionGC benchmark%n", fixture); + format_verbose("%s: RevisionGC benchmark%n", fixture); try { final AtomicReference whiteboardRef = new AtomicReference(); Repository[] cluster; @@ -87,7 +91,7 @@ public class RevisionGCTest extends Benchmark { Session s = createSession(repository); Random rand = new Random(); try { - System.out.print("Creating garbage "); + print_verbose("Creating garbage "); String longPathName = "0123456789"; int depth = Integer.getInteger("RevisionGCTest.PATHDEPTH", 0); Node p = s.getRootNode(); @@ -96,7 +100,7 @@ public class RevisionGCTest extends Benchmark { p = p.addNode(longPathName); } s.save(); - System.out.println("Creating garbage in " + p.getPath() + " (" + p.getPath().length() + " chars)"); + println_verbose("Creating garbage in " + p.getPath() + " (" + p.getPath().length() + " chars)"); for (int i = 0; i < SCALE; i++) { Node n = p.addNode("node-" + i); for (int j = 0; j < 1000; j++) { @@ -107,15 +111,15 @@ public class RevisionGCTest extends Benchmark { n.remove(); s.save(); } - System.out.print("."); + print_verbose("."); } - System.out.println(); - System.out.println("Running RevisionGC"); + println_verbose(); + println_verbose("Running RevisionGC"); Stopwatch sw = Stopwatch.createStarted(); String result = revisionGC(nodeStore); sw.stop(); - System.out.println(result); - System.out.println("Performed RevisionGC in " + sw); + println_verbose(result); + println_verbose("Performed RevisionGC in " + sw); } finally { s.logout(); } diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/UUIDLookupTest.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/UUIDLookupTest.java index cd637678ea..86fb2c7c85 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/UUIDLookupTest.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/UUIDLookupTest.java @@ -31,6 +31,8 @@ import javax.jcr.query.QueryManager; import org.apache.jackrabbit.oak.benchmark.util.OakIndexUtils; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.printf_verbose; + public class UUIDLookupTest extends AbstractTest { private static final int NODE_COUNT = 100; @@ -67,7 +69,7 @@ public class UUIDLookupTest extends AbstractTest { session.save(); } String lookupMode = lookupByQuery ? "query" : "Session#getNodeByIdentifier"; - System.out.printf("No of indexes (%s) %d, Lookup by (%s)[%s] %n",noOfIndex, noOfIndex, "lookupByQuery", lookupMode); + printf_verbose("No of indexes (%s) %d, Lookup by (%s)[%s] %n",noOfIndex, noOfIndex, "lookupByQuery", lookupMode); } @Override diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/util/FilterPrinter.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/util/FilterPrinter.java new file mode 100644 index 0000000000..9db15a9b95 --- /dev/null +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/util/FilterPrinter.java @@ -0,0 +1,62 @@ +/* + * 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.benchmark.util; + +import org.apache.jackrabbit.oak.benchmark.BenchmarkRunner; + +public class FilterPrinter { + private static boolean VERBOSE = false; + public static void println_verbose(Object s) { + if (VERBOSE) { + System.out.println(s); + } + } + + public static void println_verbose(String s) { + if (VERBOSE) { + System.out.println(s); + } + } + + public static void print_verbose(String s) { + if (VERBOSE) { + System.out.print(s); + } + } + + public static void println_verbose() { + if (VERBOSE) { + System.out.println(); + } + } + + public static void format_verbose(String format, Object... args) { + if (VERBOSE) { + System.out.format(format, args); + } + } + + public static void printf_verbose(String format, Object... args) { + if (VERBOSE) { + System.out.printf(format, args); + } + } + + public static void setVerbose(boolean VERBOSE) { + FilterPrinter.VERBOSE = VERBOSE; + } +} diff --git a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/wikipedia/WikipediaImport.java b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/wikipedia/WikipediaImport.java index 9faf349511..28adc00994 100644 --- a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/wikipedia/WikipediaImport.java +++ b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/wikipedia/WikipediaImport.java @@ -18,6 +18,8 @@ package org.apache.jackrabbit.oak.benchmark.wikipedia; import static com.google.common.base.Preconditions.checkState; import static java.lang.Math.min; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.format_verbose; +import static org.apache.jackrabbit.oak.benchmark.util.FilterPrinter.println_verbose; import java.io.BufferedInputStream; import java.io.File; @@ -45,8 +47,6 @@ public class WikipediaImport extends Benchmark { private final File dump; - private final boolean doReport; - private final boolean flat; /** @@ -55,25 +55,24 @@ public class WikipediaImport extends Benchmark { */ private boolean haltImport; - public WikipediaImport(File dump, boolean flat, boolean doReport) { + public WikipediaImport(File dump, boolean flat) { this.dump = dump; this.flat = flat; - this.doReport = doReport; } @Override public void run(Iterable fixtures) { if (dump == null) { - System.out.format("Missing Wikipedia dump, skipping import benchmark.%n"); + println_verbose("Missing Wikipedia dump, skipping import benchmark.%n"); return; } if (!dump.isFile()) { - System.out.format("The Wikipedia dump at %s is not a file, skipping import benchmark.%n", dump.getPath()); + format_verbose("The Wikipedia dump at %s is not a file, skipping import benchmark.%n", dump.getPath()); return; } for (RepositoryFixture fixture : fixtures) { if (fixture.isAvailable(1)) { - System.out.format( + format_verbose( "%s: Wikipedia import benchmark%n", fixture); try { Repository[] cluster = setupCluster(fixture); @@ -86,7 +85,7 @@ public class WikipediaImport extends Benchmark { e.printStackTrace(); } } else { - System.out.format("%s: not available, skipping.%n", fixture); + format_verbose("%s: not available, skipping.%n", fixture); } } } @@ -124,9 +123,7 @@ public class WikipediaImport extends Benchmark { int count = 0; int code = 0; - if(doReport) { - System.out.format("Importing %s...%n", dump); - } + format_verbose("Importing %s...%n", dump); String type = "nt:unstructured"; if (session.getWorkspace().getNodeTypeManager().hasNodeType("oak:Unstructured")) { @@ -195,12 +192,10 @@ public class WikipediaImport extends Benchmark { session.save(); - if (doReport) { long millis = System.currentTimeMillis() - start; - System.out.format( + format_verbose( "Imported %d pages in %d seconds (%.2fms/page)%n", count, millis / 1000, (double) millis / count); - } return code; } @@ -209,13 +204,11 @@ public class WikipediaImport extends Benchmark { if (!flat) { session.save(); } - if (doReport) { long millis = System.currentTimeMillis() - start; - System.out.format( + format_verbose( "Added %d pages in %d seconds (%.2fms/page)%n", count, millis / 1000, (double) millis / count); } - } protected void pageAdded(String title, String text) { } @@ -227,17 +220,15 @@ public class WikipediaImport extends Benchmark { private int code = 0; private int traverse(Session session) throws Exception { - System.out.format("Traversing imported pages...%n"); + format_verbose("Traversing imported pages...%n"); Node wikipedia = session.getNode("/wikipedia"); traverse(wikipedia); - if (doReport) { long millis = System.currentTimeMillis() - start; - System.out.format( + format_verbose( "Traversed %d pages in %d seconds (%.2fms/page)%n", count, millis / 1000, (double) millis / count); - } return code; } @@ -251,9 +242,9 @@ public class WikipediaImport extends Benchmark { code += page.getProperty("text").getString().hashCode(); count++; - if (count % 1000 == 0 && doReport) { + if (count % 1000 == 0) { long millis = System.currentTimeMillis() - start; - System.out.format( + format_verbose( "Read %d pages in %d seconds (%.2fms/page)%n", count, millis / 1000, (double) millis / count); }