You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by up...@apache.org on 2021/04/01 22:44:33 UTC

[geode-benchmarks] 04/05: Automatically passing properties prefixed with benchmark.system.ROLE. to JVMs

This is an automated email from the ASF dual-hosted git repository.

upthewaterspout pushed a commit to branch feature/redis-performance-testing
in repository https://gitbox.apache.org/repos/asf/geode-benchmarks.git

commit 8392f66a41d10ff977f90ef2375a7b5a8f66b2a2
Author: Dan Smith <da...@vmware.com>
AuthorDate: Thu Apr 1 14:43:31 2021 -0700

    Automatically passing properties prefixed with benchmark.system.ROLE. to JVMs
    
    Adding a way to automatically set system properties in test JVMs. Just add a property
    with the prefix benchmark.system.ROLE, where ROLE is the role of jvms to target. Eg
    
    benchmark.system.server.gemfire.disablePartitionedRegionBucketAck=true would set
    gemfire.disablePartitionedRegionBucketAck=true  in the server JVMs.
---
 .../apache/geode/perftest/BenchmarkProperties.java | 25 ++++++++++++++++++++++
 .../java/org/apache/geode/perftest/TestConfig.java |  3 +--
 .../geode/perftest/BenchmarkPropertiesTest.java    | 24 +++++++++++++++++++++
 .../geode/perftest/TestRunnerIntegrationTest.java  | 10 +++++++++
 4 files changed, 60 insertions(+), 2 deletions(-)

diff --git a/harness/src/main/java/org/apache/geode/perftest/BenchmarkProperties.java b/harness/src/main/java/org/apache/geode/perftest/BenchmarkProperties.java
new file mode 100644
index 0000000..0a7fd6e
--- /dev/null
+++ b/harness/src/main/java/org/apache/geode/perftest/BenchmarkProperties.java
@@ -0,0 +1,25 @@
+package org.apache.geode.perftest;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class BenchmarkProperties {
+
+  public static Map<String, List<String>> getDefaultJVMArgs() {
+    Map<String, List<String>> results = new HashMap<>();
+    System.getProperties().stringPropertyNames().stream()
+        .filter(name -> name.startsWith("benchmark.system."))
+        .forEach(name -> {
+          String shortName = name.replace("benchmark.system.", "");
+          String[] roleAndProperty = shortName.split("\\.", 2);
+          String role = roleAndProperty[0];
+          String property = roleAndProperty[1];
+          String value = System.getProperty(name);
+          List<String> roleProperties = results.computeIfAbsent(role, key -> new ArrayList<>());
+          roleProperties.add("-D" + property + "=" + value);
+        });
+    return results;
+  }
+}
diff --git a/harness/src/main/java/org/apache/geode/perftest/TestConfig.java b/harness/src/main/java/org/apache/geode/perftest/TestConfig.java
index 1b66fdc..1e454e6 100644
--- a/harness/src/main/java/org/apache/geode/perftest/TestConfig.java
+++ b/harness/src/main/java/org/apache/geode/perftest/TestConfig.java
@@ -21,7 +21,6 @@ import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -39,7 +38,7 @@ public class TestConfig implements Serializable {
 
   private final WorkloadConfig workloadConfig = new WorkloadConfig();
   private Map<String, Integer> roles = new LinkedHashMap<>();
-  private Map<String, List<String>> jvmArgs = new HashMap<>();
+  private Map<String, List<String>> jvmArgs = BenchmarkProperties.getDefaultJVMArgs();
   private List<TestStep> before = new ArrayList<>();
   private List<TestStep> workload = new ArrayList<>();
   private List<TestStep> after = new ArrayList<>();
diff --git a/harness/src/test/java/org/apache/geode/perftest/BenchmarkPropertiesTest.java b/harness/src/test/java/org/apache/geode/perftest/BenchmarkPropertiesTest.java
new file mode 100644
index 0000000..a8a5105
--- /dev/null
+++ b/harness/src/test/java/org/apache/geode/perftest/BenchmarkPropertiesTest.java
@@ -0,0 +1,24 @@
+package org.apache.geode.perftest;
+
+import java.util.List;
+import java.util.Map;
+
+import org.assertj.core.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+class BenchmarkPropertiesTest {
+
+  @Test
+  public void canParsePropertiesForRoles() {
+    System.setProperty("benchmark.system.role1.p1", "v1");
+    System.setProperty("benchmark.system.role1.p2", "v2");
+
+    Map<String, List<String>> defaultArgs =
+        BenchmarkProperties.getDefaultJVMArgs();
+
+    Assertions.assertThat(defaultArgs).containsOnlyKeys("role1");
+
+    Assertions.assertThat(defaultArgs.get("role1")).containsExactlyInAnyOrder("-Dp1=v1", "-Dp2=v2");
+  }
+
+}
diff --git a/harness/src/test/java/org/apache/geode/perftest/TestRunnerIntegrationTest.java b/harness/src/test/java/org/apache/geode/perftest/TestRunnerIntegrationTest.java
index f82cb6c..2bddb1a 100644
--- a/harness/src/test/java/org/apache/geode/perftest/TestRunnerIntegrationTest.java
+++ b/harness/src/test/java/org/apache/geode/perftest/TestRunnerIntegrationTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.geode.perftest;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -26,6 +27,7 @@ import java.nio.file.Path;
 import java.util.function.Predicate;
 import java.util.stream.Stream;
 
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
@@ -38,6 +40,7 @@ import org.apache.geode.perftest.yardstick.analysis.YardstickThroughputSensorPar
 
 public class TestRunnerIntegrationTest {
 
+  public static final String TEST_PROPERTY = "benchmark.system.all.prop3";
   private TestRunner runner;
 
   @TempDir
@@ -51,6 +54,11 @@ public class TestRunnerIntegrationTest {
         outputDir);
   }
 
+  @AfterEach()
+  void clearProperty() {
+    System.clearProperty(TEST_PROPERTY);
+  }
+
   @Test
   public void runsBeforeWorkload() throws Exception {
     runner.runTest(() -> {
@@ -93,6 +101,7 @@ public class TestRunnerIntegrationTest {
 
   @Test
   public void configuresJVMOptions() throws Exception {
+    System.setProperty(TEST_PROPERTY, "p3");
     runner.runTest(() -> {
       TestConfig testConfig = new TestConfig();
       testConfig.role("all", 1);
@@ -102,6 +111,7 @@ public class TestRunnerIntegrationTest {
             "Expecting system property to be set in launched JVM, but it was not present.");
         assertEquals(5, Integer.getInteger("prop2").intValue(),
             "Expecting system property to be set in launched JVM, but it was not present.");
+        assertThat(System.getProperty("prop3")).isEqualTo("p3");
       }, "all");
       return testConfig;
     });