This is an automated email from the ASF dual-hosted git repository.
jbarrett pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-benchmarks.git
The following commit(s) were added to refs/heads/develop by this push:
new d85f08e Adds more command line configuration options. (#112)
d85f08e is described below
commit d85f08ef45d80f2b5b23adfc5677d3ee36360b52
Author: Jacob Barrett <[email protected]>
AuthorDate: Mon Sep 30 09:58:18 2019 -0700
Adds more command line configuration options. (#112)
* Support for selection GC from CMS, G1, Shenandoah, or Z.
* Support for specifying JMV heap size.
* Refactors JVM argument configuration.
* Improved new GC logging
---
README.md | 2 +
build.gradle | 2 +-
geode-benchmarks/build.gradle | 22 ++--
.../benchmark/parameters/GcImplementation.java | 20 ++++
.../benchmark/parameters/GcLoggingParameters.java | 48 ++++++++
.../geode/benchmark/parameters/GcParameters.java | 87 ++++++++++++++
.../geode/benchmark/parameters/HeapParameters.java | 34 ++++++
.../geode/benchmark/parameters/JVMParameters.java | 48 --------
.../geode/benchmark/parameters/JavaVersion.java | 45 +++++++
.../geode/benchmark/parameters/JvmParameters.java | 40 +++++++
.../benchmark/parameters/ProfilerParameters.java | 37 ++++++
.../apache/geode/benchmark/parameters/Utils.java | 31 +++++
.../benchmark/topology/ClientServerTopology.java | 25 ++--
.../parameters/GcLoggingParametersTest.java | 97 ++++++++++++++++
.../benchmark/parameters/GcParametersTest.java | 129 +++++++++++++++++++++
.../benchmark/parameters/HeapParametersTest.java | 71 ++++++++++++
.../topology/ClientServerTopologyTest.java | 36 ++----
gradle/rat.gradle | 2 -
.../apache/geode/perftest/analysis/Analyzer.java | 7 +-
.../infrastructure/ssh/SshInfrastructure.java | 42 +++++--
.../apache/geode/perftest/jvms/JVMLauncher.java | 1 -
.../analysis/YardstickThroughputSensorParser.java | 9 +-
.../YardstickThroughputSensorParserTest.java | 5 +-
infrastructure/scripts/aws/run_tests.sh | 6 +-
24 files changed, 728 insertions(+), 118 deletions(-)
diff --git a/README.md b/README.md
index 3fad270..a5c97d7 100644
--- a/README.md
+++ b/README.md
@@ -53,6 +53,8 @@ Options:
-PtestJVM : Path to an alternative JVM for running the client,
locator, and servers. If not specified JAVA_HOME will be used. Note all
compilation tasks will still use JAVA_HOME.
-PwithSsl : Flag to run geode with SSL. A self-signed
certificate will be generated at runtime.
-PwithSecurityManager : Flag to start Geode with the example
implementation of SecurityManager
+ -PwithGc : Select which GC to use. Valid values CMS
(default), G1, Z.
+ -PwithHeap : Specify how large a heap the benchmark VMs should
use, default "8g". Accepts any `-Xmx` value, like "32g".
--tests : Specific benchmarks to run
(--tests=PartitionedPutBenchmark)
-d : Debug
-i : Info
diff --git a/build.gradle b/build.gradle
index 516cde4..bfa96ce 100644
--- a/build.gradle
+++ b/build.gradle
@@ -24,7 +24,7 @@ buildscript {
}
-plugins { id "org.nosphere.apache.rat" version "0.3.1" }
+plugins { id "org.nosphere.apache.rat" version "0.5.2" }
apply plugin: 'com.bmuschko.docker-remote-api'
diff --git a/geode-benchmarks/build.gradle b/geode-benchmarks/build.gradle
index 3b80ea7..cb40a38 100644
--- a/geode-benchmarks/build.gradle
+++ b/geode-benchmarks/build.gradle
@@ -36,17 +36,19 @@ repositories {
}
dependencies {
- compile(group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version:
project.'junit-jupiter-engine.version')
- compile(group: 'org.junit-pioneer', name: 'junit-pioneer', version:
project.'junit-pioneer.version')
- compile(group: 'org.apache.geode', name: 'geode-core', version: geodeVersion)
- compile(group: 'org.slf4j', name: 'slf4j-simple', version:
project.'slf4j-simple.version')
- compile(project(':harness'))
+ implementation(group: 'org.junit.jupiter', name: 'junit-jupiter-engine',
version: project.'junit-jupiter-engine.version')
+ implementation(group: 'org.junit-pioneer', name: 'junit-pioneer', version:
project.'junit-pioneer.version')
+ implementation(group: 'org.slf4j', name: 'slf4j-simple', version:
project.'slf4j-simple.version')
+ implementation(project(':harness'))
+
+ implementation(group: 'org.apache.geode', name: 'geode-core', version:
geodeVersion)
// Required for missing dependency on geode-core.
runtime(group: 'org.eclipse.jetty', name: 'jetty-webapp', version:
'9.4.12.v20180830')
+ runtime(group: 'org.apache.logging.log4j', name: 'log4j-core', version:
'2.12.0')
- testCompile(group: 'org.mockito', name: 'mockito-all', version:
project.'mockito-all.version')
- testCompile(group: 'org.assertj', name: 'assertj-core', version:
project.'assertj-core.version')
+ testImplementation(group: 'org.mockito', name: 'mockito-all', version:
project.'mockito-all.version')
+ testImplementation(group: 'org.assertj', name: 'assertj-core', version:
project.'assertj-core.version')
}
test{ useJUnitPlatform() }
@@ -69,6 +71,12 @@ task benchmark(type: Test) {
systemProperty 'TEST_HOSTS', project.findProperty('hosts')
systemProperty 'TEST_METADATA', project.findProperty('metadata')
systemProperty 'OUTPUT_DIR', outputDir
+ if (project.hasProperty('withGc')) {
+ systemProperty 'withGc', project.findProperty('withGc')
+ }
+ if (project.hasProperty('withHeap')) {
+ systemProperty 'withHeap', project.findProperty('withHeap')
+ }
systemProperty 'withSsl', project.hasProperty('withSsl')
systemProperty 'withSecurityManager',
project.hasProperty('withSecurityManager')
systemProperty 'benchmark.profiler.argument',
project.findProperty('benchmark.profiler.argument')
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcImplementation.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcImplementation.java
new file mode 100644
index 0000000..922ff51
--- /dev/null
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcImplementation.java
@@ -0,0 +1,20 @@
+/*
+ * 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.geode.benchmark.parameters;
+
+public enum GcImplementation {
+ CMS, G1, Z, Shenandoah;
+}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcLoggingParameters.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcLoggingParameters.java
new file mode 100644
index 0000000..9ea990f
--- /dev/null
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcLoggingParameters.java
@@ -0,0 +1,48 @@
+/*
+ * 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.geode.benchmark.parameters;
+
+import static org.apache.geode.benchmark.parameters.JavaVersion.v11;
+import static org.apache.geode.benchmark.parameters.Utils.configureAll;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.geode.perftest.TestConfig;
+
+public class GcLoggingParameters {
+ private static final Logger logger =
LoggerFactory.getLogger(GcLoggingParameters.class);
+
+ public static void configure(final TestConfig testConfig) {
+ final JavaVersion javaVersion = JavaVersion.current();
+ logger.info("Configuring GC logging parameters for Java {}.", javaVersion);
+ if (javaVersion.atLeast(v11)) {
+ configureAll(testConfig, "-Xlog:gc*:OUTPUT_DIR/gc.log");
+ } else {
+ configureAll(testConfig,
+ "-XX:+PrintGCDetails",
+ "-XX:+PrintGCTimeStamps",
+ "-XX:+PrintGCDateStamps",
+ "-XX:+PrintGCApplicationStoppedTime",
+ "-XX:+PrintGCApplicationConcurrentTime",
+ "-XX:+UseGCLogFileRotation",
+ "-XX:NumberOfGCLogFiles=20",
+ "-XX:GCLogFileSize=1M",
+ "-Xloggc:OUTPUT_DIR/gc.log");
+ }
+ }
+
+}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcParameters.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcParameters.java
new file mode 100644
index 0000000..3fc1470
--- /dev/null
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcParameters.java
@@ -0,0 +1,87 @@
+/*
+ * 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.geode.benchmark.parameters;
+
+import static org.apache.geode.benchmark.parameters.JavaVersion.v11;
+import static org.apache.geode.benchmark.parameters.Utils.configureAll;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.geode.perftest.TestConfig;
+
+public class GcParameters {
+ private static final Logger logger =
LoggerFactory.getLogger(GcParameters.class);
+
+ public static void configure(final TestConfig testConfig) {
+ final GcImplementation gcImplementation =
+ GcImplementation.valueOf(System.getProperty("withGc", "CMS"));
+ logger.info("Configuring {} GC.", gcImplementation);
+ switch (gcImplementation) {
+ case CMS:
+ configureCms(testConfig);
+ break;
+ case G1:
+ configureG1(testConfig);
+ break;
+ case Z:
+ configureZ(testConfig);
+ break;
+ case Shenandoah:
+ configureShenandoah(testConfig);
+ break;
+ }
+ }
+
+ private static void configureShenandoah(final TestConfig testConfig) {
+ configureAll(testConfig,
+ "-XX:+UnlockExperimentalVMOptions",
+ "-XX:+UseShenandoahGC",
+ "-XX:+AlwaysPreTouch",
+ "-XX:+UseNUMA");
+ }
+
+ private static void configureZ(final TestConfig testConfig) {
+ final JavaVersion javaVersion = JavaVersion.current();
+ if (javaVersion.olderThan(v11)) {
+ throw new IllegalArgumentException("ZGC requires Java 11 or newer");
+ }
+ configureAll(testConfig,
+ "-XX:+UnlockExperimentalVMOptions",
+ "-XX:+UseZGC");
+ }
+
+ private static void configureG1(final TestConfig testConfig) {
+ configureAll(testConfig,
+ "-XX:+UseG1GC",
+ "-XX:+UseNUMA",
+ "-XX:+ScavengeBeforeFullGC");
+ }
+
+ private static void configureCms(final TestConfig testConfig) {
+ configureAll(testConfig,
+ "-XX:+UseConcMarkSweepGC",
+ "-XX:+UseCMSInitiatingOccupancyOnly",
+ "-XX:+CMSClassUnloadingEnabled",
+ "-XX:+CMSScavengeBeforeRemark",
+ "-XX:CMSInitiatingOccupancyFraction=60",
+ "-XX:+UseNUMA",
+ "-XX:+ScavengeBeforeFullGC",
+ "-XX:+UnlockDiagnosticVMOptions",
+ "-XX:ParGCCardsPerStrideChunk=32768");
+ }
+
+}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/HeapParameters.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/HeapParameters.java
new file mode 100644
index 0000000..0ef39c6
--- /dev/null
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/HeapParameters.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.geode.benchmark.parameters;
+
+import static org.apache.geode.benchmark.parameters.Utils.configureAll;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.geode.perftest.TestConfig;
+
+public class HeapParameters {
+ private static final Logger logger =
LoggerFactory.getLogger(HeapParameters.class);
+
+ public static void configure(final TestConfig testConfig) {
+ final String heap = System.getProperty("withHeap", "8g");
+ logger.info("Configuring heap parameters {}.", heap);
+ configureAll(testConfig, "-Xmx" + heap, "-Xms" + heap);
+ }
+
+}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JVMParameters.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JVMParameters.java
deleted file mode 100644
index 5c4bdc7..0000000
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JVMParameters.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * 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.geode.benchmark.parameters;
-
-public class JVMParameters {
- public static final String[] JVM_ARGS = new String[] {
- "-XX:CMSInitiatingOccupancyFraction=60",
- "-XX:+UnlockDiagnosticVMOptions",
- "-XX:ParGCCardsPerStrideChunk=32768",
- "-XX:+UseNUMA",
- "-XX:+UseConcMarkSweepGC",
- "-XX:+UseCMSInitiatingOccupancyOnly",
- "-XX:+CMSClassUnloadingEnabled",
- "-XX:+DisableExplicitGC",
- "-XX:+ScavengeBeforeFullGC",
- "-XX:+CMSScavengeBeforeRemark",
- "-server",
- "-Djava.awt.headless=true",
- "-Dsun.rmi.dgc.server.gcInterval=9223372036854775806",
- "-Dgemfire.OSProcess.ENABLE_OUTPUT_REDIRECTION=true",
- "-Dgemfire.launcher.registerSignalHandlers=true",
- "-Xmx8g",
- "-Xms8g"
- };
- public static final String[] JVM8_ARGS = new String[] {
- "-XX:+PrintGCDetails",
- "-XX:+PrintGCTimeStamps",
- "-XX:+PrintGCDateStamps",
- "-XX:+PrintGCApplicationStoppedTime",
- "-XX:+PrintGCApplicationConcurrentTime",
- "-XX:+UseGCLogFileRotation",
- "-XX:NumberOfGCLogFiles=20",
- "-XX:GCLogFileSize=1M"
- };
-
-}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JavaVersion.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JavaVersion.java
new file mode 100644
index 0000000..ffa4175
--- /dev/null
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JavaVersion.java
@@ -0,0 +1,45 @@
+/*
+ * 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.geode.benchmark.parameters;
+
+public enum JavaVersion {
+ v8, v11, v12, v13;
+
+ public static JavaVersion current() {
+ return valueOfVersion(System.getProperty("java.runtime.version"));
+ }
+
+ private static JavaVersion valueOfVersion(final String javaVersion) {
+ if (javaVersion.startsWith("1.8")) {
+ return v8;
+ } else if (javaVersion.startsWith("11.")) {
+ return v11;
+ } else if (javaVersion.startsWith("12.")) {
+ return v12;
+ } else if (javaVersion.matches("^13\\b.*")) {
+ return v13;
+ }
+ throw new IllegalStateException("Unknown version " + javaVersion);
+ }
+
+ public boolean atLeast(final JavaVersion other) {
+ return this.compareTo(other) >= 0;
+ }
+
+ public boolean olderThan(final JavaVersion other) {
+ return this.compareTo(other) < 0;
+ }
+}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JvmParameters.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JvmParameters.java
new file mode 100644
index 0000000..3705fbe
--- /dev/null
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JvmParameters.java
@@ -0,0 +1,40 @@
+/*
+ * 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.geode.benchmark.parameters;
+
+import static org.apache.geode.benchmark.parameters.Utils.configureAll;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.geode.perftest.TestConfig;
+
+public class JvmParameters {
+ private static final Logger logger =
LoggerFactory.getLogger(JvmParameters.class);
+
+ public static void configure(final TestConfig testConfig) {
+ logger.info("Configuring JVM parameters.");
+
+ configureAll(testConfig,
+ "-server",
+ "-Djava.awt.headless=true",
+ "-Dsun.rmi.dgc.server.gcInterval=9223372036854775806",
+ "-Dgemfire.OSProcess.ENABLE_OUTPUT_REDIRECTION=true",
+ "-Dgemfire.launcher.registerSignalHandlers=true",
+ "-XX:+DisableExplicitGC");
+ }
+
+}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/ProfilerParameters.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/ProfilerParameters.java
new file mode 100644
index 0000000..5f8fdcf
--- /dev/null
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/ProfilerParameters.java
@@ -0,0 +1,37 @@
+/*
+ * 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.geode.benchmark.parameters;
+
+import static com.google.common.base.Strings.isNullOrEmpty;
+import static org.apache.geode.benchmark.parameters.Utils.configureAll;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.geode.perftest.TestConfig;
+
+public class ProfilerParameters {
+ private static final Logger logger =
LoggerFactory.getLogger(ProfilerParameters.class);
+
+ public static void configure(final TestConfig testConfig) {
+ final String profilerArgument =
System.getProperty("benchmark.profiler.argument");
+ if (!isNullOrEmpty(profilerArgument)) {
+ logger.info("Configuring profiler parameter. {}", profilerArgument);
+ configureAll(testConfig, profilerArgument);
+ }
+ }
+
+}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/Utils.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/Utils.java
new file mode 100644
index 0000000..0b06f58
--- /dev/null
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/Utils.java
@@ -0,0 +1,31 @@
+/*
+ * 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.geode.benchmark.parameters;
+
+import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.CLIENT;
+import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.LOCATOR;
+import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SERVER;
+
+import org.apache.geode.perftest.TestConfig;
+
+public interface Utils {
+
+ static void configureAll(TestConfig testConfig, String... args) {
+ testConfig.jvmArgs(LOCATOR, args);
+ testConfig.jvmArgs(SERVER, args);
+ testConfig.jvmArgs(CLIENT, args);
+ }
+}
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/topology/ClientServerTopology.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/topology/ClientServerTopology.java
index 384fa92..c04ff9c 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/topology/ClientServerTopology.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/topology/ClientServerTopology.java
@@ -14,8 +14,6 @@
*/
package org.apache.geode.benchmark.topology;
-import static org.apache.geode.benchmark.parameters.JVMParameters.JVM8_ARGS;
-import static org.apache.geode.benchmark.parameters.JVMParameters.JVM_ARGS;
import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.CLIENT;
import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.LOCATOR;
import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SERVER;
@@ -24,6 +22,11 @@ import org.bouncycastle.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.geode.benchmark.parameters.GcLoggingParameters;
+import org.apache.geode.benchmark.parameters.GcParameters;
+import org.apache.geode.benchmark.parameters.HeapParameters;
+import org.apache.geode.benchmark.parameters.JvmParameters;
+import org.apache.geode.benchmark.parameters.ProfilerParameters;
import org.apache.geode.benchmark.tasks.StartClient;
import org.apache.geode.benchmark.tasks.StartLocator;
import org.apache.geode.benchmark.tasks.StartServer;
@@ -57,17 +60,11 @@ public class ClientServerTopology {
testConfig.role(SERVER, NUM_SERVERS);
testConfig.role(CLIENT, NUM_CLIENTS);
- String profilerArgument =
System.getProperty("benchmark.profiler.argument");
-
- testConfig.jvmArgs(CLIENT, appendIfNotEmpty(JVM_ARGS, profilerArgument));
- testConfig.jvmArgs(LOCATOR, appendIfNotEmpty(JVM_ARGS, profilerArgument));
- testConfig.jvmArgs(SERVER, appendIfNotEmpty(JVM_ARGS, profilerArgument));
-
- if (System.getProperty("java.runtime.version").startsWith("1.8")) {
- testConfig.jvmArgs(CLIENT, JVM8_ARGS);
- testConfig.jvmArgs(LOCATOR, JVM8_ARGS);
- testConfig.jvmArgs(SERVER, JVM8_ARGS);
- }
+ JvmParameters.configure(testConfig);
+ HeapParameters.configure(testConfig);
+ GcLoggingParameters.configure(testConfig);
+ GcParameters.configure(testConfig);
+ ProfilerParameters.configure(testConfig);
addToTestConfig(testConfig, "withSsl", WITH_SSL_ARGUMENT);
addToTestConfig(testConfig, "withSecurityManager",
WITH_SECURITY_MANAGER_ARGUMENT);
@@ -87,7 +84,7 @@ public class ClientServerTopology {
}
}
- private static final String[] appendIfNotEmpty(String[] a, String b) {
+ private static String[] appendIfNotEmpty(String[] a, String b) {
if (null == b || b.length() == 0) {
return a;
}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/GcLoggingParametersTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/GcLoggingParametersTest.java
new file mode 100644
index 0000000..4814603
--- /dev/null
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/GcLoggingParametersTest.java
@@ -0,0 +1,97 @@
+/*
+ * 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.geode.benchmark.parameters;
+
+import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.CLIENT;
+import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.LOCATOR;
+import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SERVER;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.Properties;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import org.apache.geode.perftest.TestConfig;
+
+class GcLoggingParametersTest {
+
+ private static final String JAVA_RUNTIME_VERSION = "java.runtime.version";
+
+ private Properties systemProperties;
+
+ @BeforeEach
+ public void beforeEach() {
+ systemProperties = (Properties) System.getProperties().clone();
+ }
+
+ @AfterEach
+ public void afterEach() {
+ System.setProperties(systemProperties);
+ }
+
+ @Test
+ public void withJava8() {
+ System.setProperty(JAVA_RUNTIME_VERSION, "1.8.0_212-b03");
+ final TestConfig testConfig = new TestConfig();
+ GcLoggingParameters.configure(testConfig);
+ assertThatJava8GcLog(testConfig);
+ }
+
+ @Test
+ public void withJava11() {
+ System.setProperty(JAVA_RUNTIME_VERSION, "11.0.4+11");
+ final TestConfig testConfig = new TestConfig();
+ GcLoggingParameters.configure(testConfig);
+ assertThatJava9GcLog(testConfig);
+ }
+
+ @Test
+ public void withJava12() {
+ System.setProperty(JAVA_RUNTIME_VERSION, "12.0.2+10");
+ final TestConfig testConfig = new TestConfig();
+ GcLoggingParameters.configure(testConfig);
+ assertThatJava9GcLog(testConfig);
+ }
+
+ @Test
+ public void withJava13() {
+ System.setProperty(JAVA_RUNTIME_VERSION, "13+33");
+ final TestConfig testConfig = new TestConfig();
+ GcLoggingParameters.configure(testConfig);
+ assertThatJava9GcLog(testConfig);
+ }
+
+ private void assertThatJava8GcLog(TestConfig testConfig) {
+
assertThat(testConfig.getJvmArgs().get(CLIENT)).contains("-Xloggc:OUTPUT_DIR/gc.log");
+
assertThat(testConfig.getJvmArgs().get(SERVER)).contains("-Xloggc:OUTPUT_DIR/gc.log");
+
assertThat(testConfig.getJvmArgs().get(LOCATOR)).contains("-Xloggc:OUTPUT_DIR/gc.log");
+
assertThat(testConfig.getJvmArgs().get(CLIENT)).doesNotContain("-Xlog:gc:OUTPUT_DIR/gc.log");
+
assertThat(testConfig.getJvmArgs().get(SERVER)).doesNotContain("-Xlog:gc:OUTPUT_DIR/gc.log");
+
assertThat(testConfig.getJvmArgs().get(LOCATOR)).doesNotContain("-Xlog:gc:OUTPUT_DIR/gc.log");
+ }
+
+ private void assertThatJava9GcLog(TestConfig testConfig) {
+
assertThat(testConfig.getJvmArgs().get(CLIENT)).contains("-Xlog:gc*:OUTPUT_DIR/gc.log");
+
assertThat(testConfig.getJvmArgs().get(SERVER)).contains("-Xlog:gc*:OUTPUT_DIR/gc.log");
+
assertThat(testConfig.getJvmArgs().get(LOCATOR)).contains("-Xlog:gc*:OUTPUT_DIR/gc.log");
+
assertThat(testConfig.getJvmArgs().get(CLIENT)).doesNotContain("-Xloggc:OUTPUT_DIR/gc.log");
+
assertThat(testConfig.getJvmArgs().get(SERVER)).doesNotContain("-Xloggc:OUTPUT_DIR/gc.log");
+
assertThat(testConfig.getJvmArgs().get(LOCATOR)).doesNotContain("-Xloggc:OUTPUT_DIR/gc.log");
+ }
+
+}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/GcParametersTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/GcParametersTest.java
new file mode 100644
index 0000000..e3f4bc6
--- /dev/null
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/GcParametersTest.java
@@ -0,0 +1,129 @@
+/*
+ * 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.geode.benchmark.parameters;
+
+import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.CLIENT;
+import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.LOCATOR;
+import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SERVER;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.util.Properties;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import org.apache.geode.perftest.TestConfig;
+
+class GcParametersTest {
+ private static final String WITH_GC = "withGc";
+ private static final String JAVA_RUNTIME_VERSION = "java.runtime.version";
+ private static final String XX_USE_ZGC = "-XX:+UseZGC";
+ private static final String XX_USE_G_1_GC = "-XX:+UseG1GC";
+ private static final String XX_USE_CONC_MARK_SWEEP_GC =
"-XX:+UseConcMarkSweepGC";
+
+ private Properties systemProperties;
+
+ @BeforeEach
+ public void beforeEach() {
+ systemProperties = (Properties) System.getProperties().clone();
+ }
+
+ @AfterEach
+ public void afterEach() {
+ System.setProperties(systemProperties);
+ }
+
+ @Test
+ public void withDefault() {
+ System.clearProperty(WITH_GC);
+ final TestConfig testConfig = new TestConfig();
+ GcParameters.configure(testConfig);
+ assertCms(testConfig);
+ }
+
+ @Test
+ public void withCms() {
+ System.setProperty(WITH_GC, "CMS");
+ final TestConfig testConfig = new TestConfig();
+ GcParameters.configure(testConfig);
+ assertCms(testConfig);
+ }
+
+ @Test
+ public void withG1() {
+ System.setProperty(WITH_GC, "G1");
+ final TestConfig testConfig = new TestConfig();
+ GcParameters.configure(testConfig);
+ assertG1(testConfig);
+ }
+
+ @Test
+ public void withZ() {
+ System.setProperty(WITH_GC, "Z");
+ System.setProperty(JAVA_RUNTIME_VERSION, "11.0.4+11");
+ final TestConfig testConfig = new TestConfig();
+ GcParameters.configure(testConfig);
+ assertZ(testConfig);
+ }
+
+ @Test
+ public void withZinJava8() {
+ System.setProperty(WITH_GC, "Z");
+ System.setProperty(JAVA_RUNTIME_VERSION, "1.8.0_212-b03");
+ final TestConfig testConfig = new TestConfig();
+ assertThatThrownBy(() -> GcParameters.configure(testConfig))
+ .isInstanceOf(IllegalArgumentException.class);
+ }
+
+ private void assertCms(TestConfig testConfig) {
+
assertThat(testConfig.getJvmArgs().get(CLIENT)).contains(XX_USE_CONC_MARK_SWEEP_GC);
+
assertThat(testConfig.getJvmArgs().get(SERVER)).contains(XX_USE_CONC_MARK_SWEEP_GC);
+
assertThat(testConfig.getJvmArgs().get(LOCATOR)).contains(XX_USE_CONC_MARK_SWEEP_GC);
+
assertThat(testConfig.getJvmArgs().get(CLIENT)).doesNotContain(XX_USE_G_1_GC);
+
assertThat(testConfig.getJvmArgs().get(SERVER)).doesNotContain(XX_USE_G_1_GC);
+
assertThat(testConfig.getJvmArgs().get(LOCATOR)).doesNotContain(XX_USE_G_1_GC);
+ assertThat(testConfig.getJvmArgs().get(CLIENT)).doesNotContain(XX_USE_ZGC);
+ assertThat(testConfig.getJvmArgs().get(SERVER)).doesNotContain(XX_USE_ZGC);
+
assertThat(testConfig.getJvmArgs().get(LOCATOR)).doesNotContain(XX_USE_ZGC);
+ }
+
+ private void assertG1(TestConfig testConfig) {
+ assertThat(testConfig.getJvmArgs().get(CLIENT)).contains(XX_USE_G_1_GC);
+ assertThat(testConfig.getJvmArgs().get(SERVER)).contains(XX_USE_G_1_GC);
+ assertThat(testConfig.getJvmArgs().get(LOCATOR)).contains(XX_USE_G_1_GC);
+
assertThat(testConfig.getJvmArgs().get(CLIENT)).doesNotContain(XX_USE_CONC_MARK_SWEEP_GC);
+
assertThat(testConfig.getJvmArgs().get(SERVER)).doesNotContain(XX_USE_CONC_MARK_SWEEP_GC);
+
assertThat(testConfig.getJvmArgs().get(LOCATOR)).doesNotContain(XX_USE_CONC_MARK_SWEEP_GC);
+ assertThat(testConfig.getJvmArgs().get(CLIENT)).doesNotContain(XX_USE_ZGC);
+ assertThat(testConfig.getJvmArgs().get(SERVER)).doesNotContain(XX_USE_ZGC);
+
assertThat(testConfig.getJvmArgs().get(LOCATOR)).doesNotContain(XX_USE_ZGC);
+ }
+
+ private void assertZ(TestConfig testConfig) {
+ assertThat(testConfig.getJvmArgs().get(CLIENT)).contains(XX_USE_ZGC);
+ assertThat(testConfig.getJvmArgs().get(SERVER)).contains(XX_USE_ZGC);
+ assertThat(testConfig.getJvmArgs().get(LOCATOR)).contains(XX_USE_ZGC);
+
assertThat(testConfig.getJvmArgs().get(CLIENT)).doesNotContain(XX_USE_CONC_MARK_SWEEP_GC);
+
assertThat(testConfig.getJvmArgs().get(SERVER)).doesNotContain(XX_USE_CONC_MARK_SWEEP_GC);
+
assertThat(testConfig.getJvmArgs().get(LOCATOR)).doesNotContain(XX_USE_CONC_MARK_SWEEP_GC);
+
assertThat(testConfig.getJvmArgs().get(CLIENT)).doesNotContain(XX_USE_G_1_GC);
+
assertThat(testConfig.getJvmArgs().get(SERVER)).doesNotContain(XX_USE_G_1_GC);
+
assertThat(testConfig.getJvmArgs().get(LOCATOR)).doesNotContain(XX_USE_G_1_GC);
+ }
+
+}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/HeapParametersTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/HeapParametersTest.java
new file mode 100644
index 0000000..9a06408
--- /dev/null
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/HeapParametersTest.java
@@ -0,0 +1,71 @@
+/*
+ * 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.geode.benchmark.parameters;
+
+import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.CLIENT;
+import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.LOCATOR;
+import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SERVER;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.Properties;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import org.apache.geode.perftest.TestConfig;
+
+class HeapParametersTest {
+
+ private static final String WITH_HEAP = "withHeap";
+
+ private Properties systemProperties;
+
+ @BeforeEach
+ public void beforeEach() {
+ systemProperties = (Properties) System.getProperties().clone();
+ }
+
+ @AfterEach
+ public void afterEach() {
+ System.setProperties(systemProperties);
+ }
+
+ @Test
+ public void withDefault() {
+ System.clearProperty(WITH_HEAP);
+ final TestConfig testConfig = new TestConfig();
+ HeapParameters.configure(testConfig);
+ assertHeap(testConfig, "8g");
+ }
+
+ @Test
+ public void with16g() {
+ System.setProperty(WITH_HEAP, "16g");
+ final TestConfig testConfig = new TestConfig();
+ HeapParameters.configure(testConfig);
+ assertHeap(testConfig, "16g");
+ }
+
+ private void assertHeap(final TestConfig testConfig, final String heap) {
+ assertThat(testConfig.getJvmArgs().get(CLIENT)).contains("-Xmx" + heap);
+ assertThat(testConfig.getJvmArgs().get(SERVER)).contains("-Xmx" + heap);
+ assertThat(testConfig.getJvmArgs().get(LOCATOR)).contains("-Xmx" + heap);
+ assertThat(testConfig.getJvmArgs().get(CLIENT)).contains("-Xms" + heap);
+ assertThat(testConfig.getJvmArgs().get(SERVER)).contains("-Xms" + heap);
+ assertThat(testConfig.getJvmArgs().get(LOCATOR)).contains("-Xms" + heap);
+ }
+}
diff --git
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/topology/ClientServerTopologyTest.java
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/topology/ClientServerTopologyTest.java
index fe5aa64..684929d 100644
---
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/topology/ClientServerTopologyTest.java
+++
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/topology/ClientServerTopologyTest.java
@@ -16,10 +16,10 @@
package org.apache.geode.benchmark.topology;
-import static org.apache.geode.benchmark.parameters.JVMParameters.JVM8_ARGS;
-import static org.apache.geode.benchmark.parameters.JVMParameters.JVM_ARGS;
import static org.assertj.core.api.Assertions.assertThat;
+import java.util.Properties;
+
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -28,12 +28,16 @@ import org.apache.geode.perftest.TestConfig;
public class ClientServerTopologyTest {
+ private Properties systemProperties;
@BeforeEach
+ public void beforeEach() {
+ systemProperties = (Properties) System.getProperties().clone();
+ }
+
@AfterEach
- public void clearProperties() {
- System.clearProperty("withSsl");
- System.clearProperty("withSecurityManager");
+ public void afterEach() {
+ System.setProperties(systemProperties);
}
@Test
@@ -52,22 +56,6 @@ public class ClientServerTopologyTest {
}
@Test
- public void configWithJava8() {
- System.setProperty("java.runtime.version", "1.8.0_212");
- TestConfig testConfig = new TestConfig();
- ClientServerTopology.configure(testConfig);
- assertThat(testConfig.getJvmArgs().get("client")).contains(JVM8_ARGS);
- }
-
- @Test
- public void configWithJava9() {
- System.setProperty("java.runtime.version", "9.0.1");
- TestConfig testConfig = new TestConfig();
- ClientServerTopology.configure(testConfig);
-
assertThat(testConfig.getJvmArgs().get("client")).doesNotContain(JVM8_ARGS);
- }
-
- @Test
public void configWithoutSecurityManager() {
TestConfig testConfig = new TestConfig();
ClientServerTopology.configure(testConfig);
@@ -83,9 +71,9 @@ public class ClientServerTopologyTest {
}
@Test
- public void configWithSecurityManagerAndSslAndJava9() {
+ public void configWithSecurityManagerAndSslAndJava11() {
System.setProperty("withSecurityManager", "true");
- System.setProperty("java.runtime.version", "9.0.1");
+ System.setProperty("java.runtime.version", "11.0.4+11");
System.setProperty("withSsl", "true");
TestConfig testConfig = new TestConfig();
@@ -93,7 +81,5 @@ public class ClientServerTopologyTest {
assertThat(testConfig.getJvmArgs().get("client")).contains("-DwithSecurityManager=true");
assertThat(testConfig.getJvmArgs().get("client")).contains("-DwithSsl=true");
- assertThat(testConfig.getJvmArgs().get("client")).contains(JVM_ARGS);
-
assertThat(testConfig.getJvmArgs().get("client")).doesNotContain(JVM8_ARGS);
}
}
diff --git a/gradle/rat.gradle b/gradle/rat.gradle
index 1b23e69..e78d996 100644
--- a/gradle/rat.gradle
+++ b/gradle/rat.gradle
@@ -70,5 +70,3 @@ rat {
'**/*.cfg',
]
}
-
-subprojects { check.dependsOn rat }
diff --git
a/harness/src/main/java/org/apache/geode/perftest/analysis/Analyzer.java
b/harness/src/main/java/org/apache/geode/perftest/analysis/Analyzer.java
index d3853dc..13a90cc 100644
--- a/harness/src/main/java/org/apache/geode/perftest/analysis/Analyzer.java
+++ b/harness/src/main/java/org/apache/geode/perftest/analysis/Analyzer.java
@@ -14,6 +14,8 @@
*/
package org.apache.geode.perftest.analysis;
+import static java.lang.Double.isNaN;
+
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
@@ -74,7 +76,10 @@ public class Analyzer {
for (BenchmarkRunResult.BenchmarkResult benchmarkResult :
benchmarkRunResult
.getBenchmarkResults()) {
for (BenchmarkRunResult.ProbeResult probeResult :
benchmarkResult.probeResults) {
- if (probeResult.description.equals("average latency")) {
+ if (isNaN(probeResult.baseline) || isNaN(probeResult.test)) {
+ errorMessage.append("BENCHMARK FAILED:
").append(benchmarkResult.name)
+ .append(" missing result file.\n");
+ } else if (probeResult.description.equals("average latency")) {
if (probeResult.getDifference() > 0) {
isHighWaterCandidate = false;
if (probeResult.getDifference() >= 0.05) {
diff --git
a/harness/src/main/java/org/apache/geode/perftest/infrastructure/ssh/SshInfrastructure.java
b/harness/src/main/java/org/apache/geode/perftest/infrastructure/ssh/SshInfrastructure.java
index 645e2b1..16765de 100644
---
a/harness/src/main/java/org/apache/geode/perftest/infrastructure/ssh/SshInfrastructure.java
+++
b/harness/src/main/java/org/apache/geode/perftest/infrastructure/ssh/SshInfrastructure.java
@@ -40,6 +40,7 @@ import net.schmizz.sshj.Config;
import net.schmizz.sshj.DefaultConfig;
import net.schmizz.sshj.SSHClient;
import net.schmizz.sshj.connection.channel.direct.Session;
+import net.schmizz.sshj.connection.channel.direct.Signal;
import net.schmizz.sshj.transport.verification.PromiscuousVerifier;
import net.schmizz.sshj.xfer.FileSystemFile;
import org.slf4j.Logger;
@@ -82,24 +83,41 @@ public class SshInfrastructure implements Infrastructure {
}
@Override
- public int onNode(Node node, String[] shellCommand)
- throws IOException {
- try (SSHClient client = getSSHClient(node.getAddress())) {
-
- String script = "'" + String.join("' '", shellCommand) + "'";
-
- try (Session session = client.startSession()) {
- logger.info("Executing " + script + " on " + node.getAddress());
- final Session.Command cmd = session.exec(script);
- CompletableFuture<Void> copyStdout =
+ public int onNode(final Node node, final String[] shellCommand) throws
IOException {
+ try (final SSHClient client = getSSHClient(node.getAddress());
+ final Session session = client.startSession()) {
+ final String script = "'" + String.join("' '", shellCommand) + "'";
+ logger.info("Executing {} on {}", script, node.getAddress());
+ try (final Session.Command cmd = session.exec(script)) {
+ final CompletableFuture<Void> copyStdout =
copyStreamAsynchronously(cmd.getInputStream(), System.out);
- CompletableFuture<Void> copyStdErr =
+ final CompletableFuture<Void> copyStdErr =
copyStreamAsynchronously(cmd.getErrorStream(), System.err);
cmd.join();
copyStdout.join();
copyStdErr.join();
- return cmd.getExitStatus();
+
+ final Boolean coreDumped = cmd.getExitWasCoreDumped();
+ if (null != coreDumped && coreDumped) {
+ logger.error("Core dumped for {} on {}", script, node.getAddress());
+ }
+ final String errorMessage = cmd.getExitErrorMessage();
+ if (null != errorMessage) {
+ logger.error("Exit error message for {} on {} was \"{}\"", script,
node.getAddress(),
+ errorMessage);
+ }
+ final Signal exitSignal = cmd.getExitSignal();
+ if (null != exitSignal) {
+ logger.error("Exit signal for {} on {} was {}", script,
node.getAddress(), exitSignal);
+ }
+
+ final Integer exitStatus = cmd.getExitStatus();
+ if (null == exitStatus) {
+ logger.error("Exit status for {} on {} was null", script,
node.getAddress());
+ return -1;
+ }
+ return exitStatus;
}
}
}
diff --git
a/harness/src/main/java/org/apache/geode/perftest/jvms/JVMLauncher.java
b/harness/src/main/java/org/apache/geode/perftest/jvms/JVMLauncher.java
index 1a675c6..6b5cfce 100644
--- a/harness/src/main/java/org/apache/geode/perftest/jvms/JVMLauncher.java
+++ b/harness/src/main/java/org/apache/geode/perftest/jvms/JVMLauncher.java
@@ -99,7 +99,6 @@ class JVMLauncher {
"-Dgemfire." + SSL_TRUSTSTORE + "=" + jvmConfig.getLibDir() +
"/temp-self-signed.jks");
command.add("-Dgemfire." + SSL_TRUSTSTORE_PASSWORD + "=123456");
}
- command.add("-Xloggc:" + jvmConfig.getOutputDir() + "/gc.log");
command.addAll(replaceTokens(jvmConfig.getJvmArgs(), jvmConfig));
command.add(ChildJVM.class.getName());
diff --git
a/harness/src/main/java/org/apache/geode/perftest/yardstick/analysis/YardstickThroughputSensorParser.java
b/harness/src/main/java/org/apache/geode/perftest/yardstick/analysis/YardstickThroughputSensorParser.java
index c873c8c..75612ba 100644
---
a/harness/src/main/java/org/apache/geode/perftest/yardstick/analysis/YardstickThroughputSensorParser.java
+++
b/harness/src/main/java/org/apache/geode/perftest/yardstick/analysis/YardstickThroughputSensorParser.java
@@ -21,6 +21,8 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.yardstickframework.probes.ThroughputLatencyProbe;
import org.apache.geode.perftest.analysis.ProbeResultParser;
@@ -30,6 +32,8 @@ import org.apache.geode.perftest.analysis.ProbeResultParser;
* reports the average throughput in operations/second.
*/
public class YardstickThroughputSensorParser implements ProbeResultParser {
+ private static final Logger logger =
+ LoggerFactory.getLogger(YardstickThroughputSensorParser.class);
public static final String sensorOutputFile = "ThroughputLatencyProbe.csv";
public static final String probeResultDescription = "average ops/second";
@@ -37,8 +41,7 @@ public class YardstickThroughputSensorParser implements
ProbeResultParser {
public void parseResults(File resultDir) throws IOException {
File sensorData = new File(resultDir, sensorOutputFile);
- try (FileReader fileReader = new FileReader(sensorData);
- BufferedReader dataStream = new BufferedReader(new
FileReader(sensorData))) {
+ try (BufferedReader dataStream = new BufferedReader(new
FileReader(sensorData))) {
String nextLine;
while ((nextLine = dataStream.readLine()) != null) {
@@ -49,6 +52,8 @@ public class YardstickThroughputSensorParser implements
ProbeResultParser {
}
datapoints.add(new SensorDatapoint(nextLine));
}
+ } catch (java.io.FileNotFoundException e) {
+ logger.warn("Result file {} missing.", sensorData, e);
}
}
diff --git
a/harness/src/test/java/org/apache/geode/perftest/yardstick/analysis/YardstickThroughputSensorParserTest.java
b/harness/src/test/java/org/apache/geode/perftest/yardstick/analysis/YardstickThroughputSensorParserTest.java
index b8e6285..27e5d28 100644
---
a/harness/src/test/java/org/apache/geode/perftest/yardstick/analysis/YardstickThroughputSensorParserTest.java
+++
b/harness/src/test/java/org/apache/geode/perftest/yardstick/analysis/YardstickThroughputSensorParserTest.java
@@ -65,11 +65,12 @@ public class YardstickThroughputSensorParserTest {
}
@Test
- public void throwsExceptionOnMissingFile() throws IOException {
+ public void doesNotThrowExceptionOnMissingFile() throws IOException {
final File testFolder = temporaryFolder.resolve("testFolder").toFile();
assertTrue(testFolder.mkdirs());
YardstickThroughputSensorParser parser = new
YardstickThroughputSensorParser();
- assertThrows(IOException.class, () -> parser.parseResults(testFolder));
+ parser.parseResults(testFolder);
+ assertEquals(3, parser.getProbeResults().size());
}
@Test
diff --git a/infrastructure/scripts/aws/run_tests.sh
b/infrastructure/scripts/aws/run_tests.sh
index 032ecea..6dd7b25 100755
--- a/infrastructure/scripts/aws/run_tests.sh
+++ b/infrastructure/scripts/aws/run_tests.sh
@@ -131,8 +131,8 @@ fi
fixRepoName() {
if [ -z "$1" ]; then
return 1
- elif [ ${1:0:5} = "https" ]; then
- echo ${1}
+ elif [ "${1:0:5}" = "https" ] || [ "${1:0:4}" = "git@" ]; then
+ echo "${1}"
else
echo "https://github.com/${1}"
fi
@@ -157,7 +157,7 @@ if [[ -z "${VERSION}" ]]; then
ssh ${SSH_OPTIONS} geode@$FIRST_INSTANCE "\
rm -rf geode && \
- git clone ${REPO} && \
+ git clone ${REPO} geode && \
cd geode && git checkout ${BRANCH}"
set +e