Setting the output directory for each ChildJVM
Making sure we put all artifacts in a named output directory for each
process.
diff --git a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/StartClient.java b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/StartClient.java
index dab4d8f..f69c284 100644
--- a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/StartClient.java
+++ b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/StartClient.java
@@ -17,6 +17,7 @@
package org.apache.geode.benchmark.tasks;
+import java.io.File;
import java.net.InetAddress;
import org.apache.geode.cache.client.ClientCache;
@@ -38,10 +39,12 @@
InetAddress locator = context.getHostsForRole("locator").iterator().next();
+ String statsFile = new File(context.getOutputDir(), "stats.gfs").getAbsolutePath();
+
ClientCache clientCache = new ClientCacheFactory()
.addPoolLocator(locator.getHostAddress(), locatorPort)
.set(ConfigurationProperties.STATISTIC_SAMPLING_ENABLED,"true")
- .set(ConfigurationProperties.STATISTIC_ARCHIVE_FILE,"output/stats.gfs")
+ .set(ConfigurationProperties.STATISTIC_ARCHIVE_FILE, statsFile)
.create();
clientCache.createClientRegionFactory(ClientRegionShortcut.PROXY)
diff --git a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/StartLocator.java b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/StartLocator.java
index f04b3e0..5bc6d39 100644
--- a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/StartLocator.java
+++ b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/StartLocator.java
@@ -17,6 +17,7 @@
package org.apache.geode.benchmark.tasks;
+import java.io.File;
import java.net.InetAddress;
import java.util.Properties;
@@ -35,9 +36,12 @@
@Override
public void run(TestContext context) throws Exception {
Properties properties = new Properties();
- properties.setProperty(ConfigurationProperties.NAME,"locator-"+ InetAddress.getLocalHost());
+
+ String statsFile = new File(context.getOutputDir(), "stats.gfs").getAbsolutePath();
properties.setProperty(ConfigurationProperties.STATISTIC_SAMPLING_ENABLED,"true");
- properties.setProperty(ConfigurationProperties.STATISTIC_ARCHIVE_FILE,"output/stats.gfs");
+ properties.setProperty(ConfigurationProperties.STATISTIC_ARCHIVE_FILE, statsFile);
+
+ properties.setProperty(ConfigurationProperties.NAME,"locator-"+ InetAddress.getLocalHost());
Locator.startLocatorAndDS(locatorPort, null, properties);
}
}
diff --git a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/StartServer.java b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/StartServer.java
index d2bb8aa..46f9445 100644
--- a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/StartServer.java
+++ b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/StartServer.java
@@ -17,6 +17,7 @@
package org.apache.geode.benchmark.tasks;
+import java.io.File;
import java.net.InetAddress;
import org.apache.geode.cache.Cache;
@@ -39,12 +40,13 @@
public void run(TestContext context) throws Exception {
String locatorString = LocatorUtil.getLocatorString(context, locatorPort);
+ String statsFile = new File(context.getOutputDir(), "stats.gfs").getAbsolutePath();
Cache cache = new CacheFactory()
.set(ConfigurationProperties.LOCATORS,locatorString)
.set(ConfigurationProperties.NAME,"server-"+ InetAddress.getLocalHost())
.set(ConfigurationProperties.STATISTIC_SAMPLING_ENABLED,"true")
- .set(ConfigurationProperties.STATISTIC_ARCHIVE_FILE,"output/stats.gfs")
+ .set(ConfigurationProperties.STATISTIC_ARCHIVE_FILE, statsFile)
.create();
CacheServer cacheServer = ((Cache) cache).addCacheServer();
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 e3acb06..1d5a6f6 100644
--- a/harness/src/main/java/org/apache/geode/perftest/TestConfig.java
+++ b/harness/src/main/java/org/apache/geode/perftest/TestConfig.java
@@ -78,7 +78,7 @@
* @param roles The roles to run the workload on
*/
public void workload(BenchmarkDriver benchmark, String ... roles) {
- workload.add(new TestStep(new YardstickTask(benchmark, workloadConfig, "output"), roles));
+ workload.add(new TestStep(new YardstickTask(benchmark, workloadConfig), roles));
}
diff --git a/harness/src/main/java/org/apache/geode/perftest/TestContext.java b/harness/src/main/java/org/apache/geode/perftest/TestContext.java
index 9a4425c..589900f 100644
--- a/harness/src/main/java/org/apache/geode/perftest/TestContext.java
+++ b/harness/src/main/java/org/apache/geode/perftest/TestContext.java
@@ -17,10 +17,13 @@
package org.apache.geode.perftest;
+import java.io.File;
import java.io.Serializable;
import java.net.InetAddress;
import java.util.Set;
public interface TestContext extends Serializable {
Set<InetAddress> getHostsForRole(String role);
+
+ File getOutputDir();
}
diff --git a/harness/src/main/java/org/apache/geode/perftest/jdk/SystemInterface.java b/harness/src/main/java/org/apache/geode/perftest/jdk/SystemInterface.java
index 91a18e8..7d25070 100644
--- a/harness/src/main/java/org/apache/geode/perftest/jdk/SystemInterface.java
+++ b/harness/src/main/java/org/apache/geode/perftest/jdk/SystemInterface.java
@@ -24,7 +24,7 @@
*/
public class SystemInterface {
- public static String getProperty(String property) {
+ public String getProperty(String property) {
return System.getProperty(property);
}
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 6d3bdef..eb26879 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
@@ -40,16 +40,17 @@
throws UnknownHostException {
List<CompletableFuture<Void>> futures = new ArrayList<CompletableFuture<Void>>();
for (JVMMapping entry : mapping) {
- futures.add(launchWorker(infra, rmiPort, entry.getId(), entry.getNode(), libDir));
+ futures.add(launchWorker(infra, rmiPort, entry.getId(), entry.getNode(), libDir, entry.getOutputDir()));
}
return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
}
CompletableFuture<Void> launchWorker(Infrastructure infra, int rmiPort,
- int id, final Infrastructure.Node node, String libDir)
+ int id, final Infrastructure.Node node, String libDir,
+ String outputDir)
throws UnknownHostException {
String[] shellCommand = buildCommand(InetAddress.getLocalHost().getHostAddress(), rmiPort, id,
- libDir);
+ libDir, outputDir);
CompletableFuture<Void> future = new CompletableFuture<Void>();
Thread thread = new Thread("Worker " + node.getAddress()) {
public void run() {
@@ -71,7 +72,8 @@
return future;
}
- String[] buildCommand(String rmiHost, int rmiPort, int id, String libDir) {
+ String[] buildCommand(String rmiHost, int rmiPort, int id, String libDir,
+ String outputDir) {
List<String> command = new ArrayList<String>();
command.add("java");
@@ -80,6 +82,7 @@
command.add("-D" + RemoteJVMFactory.RMI_HOST + "=" + rmiHost);
command.add("-D" + RemoteJVMFactory.RMI_PORT_PROPERTY + "=" + rmiPort);
command.add("-D" + RemoteJVMFactory.JVM_ID + "=" + id);
+ command.add("-D" + RemoteJVMFactory.OUTPUT_DIR + "=" + outputDir);
command.add(ChildJVM.class.getName());
return command.toArray(new String[0]);
diff --git a/harness/src/main/java/org/apache/geode/perftest/jvms/JVMMapping.java b/harness/src/main/java/org/apache/geode/perftest/jvms/JVMMapping.java
index e01f1f9..0ae6236 100644
--- a/harness/src/main/java/org/apache/geode/perftest/jvms/JVMMapping.java
+++ b/harness/src/main/java/org/apache/geode/perftest/jvms/JVMMapping.java
@@ -44,4 +44,7 @@
return id;
}
+ public String getOutputDir() {
+ return "output/" + role + "-" + id;
+ }
}
diff --git a/harness/src/main/java/org/apache/geode/perftest/jvms/RemoteJVMFactory.java b/harness/src/main/java/org/apache/geode/perftest/jvms/RemoteJVMFactory.java
index 61f5c81..af18ddc 100644
--- a/harness/src/main/java/org/apache/geode/perftest/jvms/RemoteJVMFactory.java
+++ b/harness/src/main/java/org/apache/geode/perftest/jvms/RemoteJVMFactory.java
@@ -45,6 +45,7 @@
public static final String RMI_HOST = "RMI_HOST";
public static final String RMI_PORT_PROPERTY = "RMI_PORT";
public static final String CONTROLLER = "CONTROLLER";
+ public static final String OUTPUT_DIR = "OUTPUT_DIR";
public static final String JVM_ID = "JVM_ID";
public static final int RMI_PORT = 33333;
public static final String CLASSPATH = System.getProperty("java.class.path");
diff --git a/harness/src/main/java/org/apache/geode/perftest/jvms/RemoteJVMs.java b/harness/src/main/java/org/apache/geode/perftest/jvms/RemoteJVMs.java
index f619282..aa1e546 100644
--- a/harness/src/main/java/org/apache/geode/perftest/jvms/RemoteJVMs.java
+++ b/harness/src/main/java/org/apache/geode/perftest/jvms/RemoteJVMs.java
@@ -72,21 +72,13 @@
exited.get();
}
- public String getRole(Infrastructure.Node node) {
- return jvmMappings.stream()
- .filter(mapping -> mapping.getNode().equals(node))
- .map(JVMMapping::getRole)
- .findFirst()
- .orElse("no-role");
- }
-
/**
* Copy results to the provided output directory
*/
public void copyResults(File benchmarkOutput) throws IOException {
benchmarkOutput.mkdirs();
for (JVMMapping jvm : jvmMappings) {
- infra.copyFromNode(jvm.getNode(), "output", new File(benchmarkOutput, jvm.getRole() + "-" + jvm.getId()));
+ infra.copyFromNode(jvm.getNode(), jvm.getOutputDir(), new File(benchmarkOutput, jvm.getRole() + "-" + jvm.getId()));
}
}
}
diff --git a/harness/src/main/java/org/apache/geode/perftest/jvms/rmi/ChildJVM.java b/harness/src/main/java/org/apache/geode/perftest/jvms/rmi/ChildJVM.java
index d29563a..a1e1b5e 100644
--- a/harness/src/main/java/org/apache/geode/perftest/jvms/rmi/ChildJVM.java
+++ b/harness/src/main/java/org/apache/geode/perftest/jvms/rmi/ChildJVM.java
@@ -20,6 +20,7 @@
import java.io.File;
import java.io.PrintStream;
+import org.apache.commons.io.FileUtils;
import org.bouncycastle.jcajce.provider.drbg.DRBG;
import org.apache.geode.perftest.jdk.RMI;
@@ -37,24 +38,32 @@
private final RMI rmi;
private final SystemInterface system;
private final int pingTime;
- private final File outputDir;
- public ChildJVM(RMI rmi, SystemInterface system, int pingTime, File outputDir) {
+ public ChildJVM(RMI rmi, SystemInterface system, int pingTime) {
this.rmi = rmi;
this.system = system;
this.pingTime = pingTime;
- this.outputDir = outputDir;
}
public static void main(String[] args) {
- new ChildJVM(new RMI(), new SystemInterface(), 1000, new File("output")).run();
+ new ChildJVM(new RMI(), new SystemInterface(), 1000).run();
}
void run() {
try {
String RMI_HOST = system.getProperty(RemoteJVMFactory.RMI_HOST);
String RMI_PORT = system.getProperty(RemoteJVMFactory.RMI_PORT_PROPERTY);
+ String OUTPUT_DIR = system.getProperty(RemoteJVMFactory.OUTPUT_DIR);
int id = system.getInteger(RemoteJVMFactory.JVM_ID);
+
+
+ if(RMI_HOST == null || RMI_PORT == null || OUTPUT_DIR == null) {
+ throw new IllegalStateException("ChildJVM must be launched with all required system properties set.");
+ }
+
+ File outputDir = new File(OUTPUT_DIR);
+ //Clean up the output directory before the test runs
+ FileUtils.deleteQuietly(outputDir);
outputDir.mkdirs();
PrintStream out = new PrintStream(new File(outputDir, "ChildJVM-" + id + ".txt"));
system.setOut(out);
@@ -64,7 +73,7 @@
.lookup("//" + RMI_HOST + ":" + RMI_PORT + "/" + RemoteJVMFactory.CONTROLLER);
SharedContext sharedContext = controller.getsharedContext();
- DefaultTestContext context = new DefaultTestContext(sharedContext);
+ DefaultTestContext context = new DefaultTestContext(sharedContext, outputDir);
Worker worker = new Worker(context);
diff --git a/harness/src/main/java/org/apache/geode/perftest/runner/DefaultTestContext.java b/harness/src/main/java/org/apache/geode/perftest/runner/DefaultTestContext.java
index f54563a..92a7182 100644
--- a/harness/src/main/java/org/apache/geode/perftest/runner/DefaultTestContext.java
+++ b/harness/src/main/java/org/apache/geode/perftest/runner/DefaultTestContext.java
@@ -17,6 +17,7 @@
package org.apache.geode.perftest.runner;
+import java.io.File;
import java.net.InetAddress;
import java.util.Set;
@@ -25,13 +26,20 @@
public class DefaultTestContext implements TestContext {
private SharedContext sharedContext;
+ private File outputDir;
- public DefaultTestContext(SharedContext sharedContext) {
+ public DefaultTestContext(SharedContext sharedContext, File outputDir) {
this.sharedContext = sharedContext;
+ this.outputDir = outputDir;
}
@Override
public Set<InetAddress> getHostsForRole(String role) {
return sharedContext.getHostsForRole(role);
}
+
+ @Override
+ public File getOutputDir() {
+ return outputDir;
+ }
}
diff --git a/harness/src/main/java/org/apache/geode/perftest/yardstick/YardstickTask.java b/harness/src/main/java/org/apache/geode/perftest/yardstick/YardstickTask.java
index 80f4c1a..9046327 100644
--- a/harness/src/main/java/org/apache/geode/perftest/yardstick/YardstickTask.java
+++ b/harness/src/main/java/org/apache/geode/perftest/yardstick/YardstickTask.java
@@ -42,13 +42,11 @@
*/
public class YardstickTask implements Task {
private final BenchmarkDriver benchmark;
- private final String outputDir;
private WorkloadConfig workloadConfig;
- public YardstickTask(BenchmarkDriver benchmark, WorkloadConfig workloadConfig, String outputDir) {
+ public YardstickTask(BenchmarkDriver benchmark, WorkloadConfig workloadConfig) {
this.benchmark = benchmark;
this.workloadConfig = workloadConfig;
- this.outputDir = outputDir;
}
@Override
@@ -77,7 +75,7 @@
@Override
public String outputFolder() {
- return outputDir;
+ return context.getOutputDir().getAbsolutePath();
}
};
cfg.output(System.out);
diff --git a/harness/src/test/java/org/apache/geode/perftest/jvms/RemoteJVMFactoryTest.java b/harness/src/test/java/org/apache/geode/perftest/jvms/RemoteJVMFactoryTest.java
index 4d1eb2b..cb576f0 100644
--- a/harness/src/test/java/org/apache/geode/perftest/jvms/RemoteJVMFactoryTest.java
+++ b/harness/src/test/java/org/apache/geode/perftest/jvms/RemoteJVMFactoryTest.java
@@ -41,7 +41,6 @@
import org.apache.geode.perftest.jvms.classpath.ClassPathCopier;
import org.apache.geode.perftest.jvms.rmi.Controller;
import org.apache.geode.perftest.jvms.rmi.ControllerFactory;
-import org.apache.geode.perftest.runner.SharedContext;
public class RemoteJVMFactoryTest {
diff --git a/harness/src/test/java/org/apache/geode/perftest/jvms/rmi/ChildJVMTest.java b/harness/src/test/java/org/apache/geode/perftest/jvms/rmi/ChildJVMTest.java
index 3fa21ca..2d61883 100644
--- a/harness/src/test/java/org/apache/geode/perftest/jvms/rmi/ChildJVMTest.java
+++ b/harness/src/test/java/org/apache/geode/perftest/jvms/rmi/ChildJVMTest.java
@@ -17,6 +17,10 @@
package org.apache.geode.perftest.jvms.rmi;
+import static org.apache.geode.perftest.jvms.RemoteJVMFactory.OUTPUT_DIR;
+import static org.apache.geode.perftest.jvms.RemoteJVMFactory.RMI_HOST;
+import static org.apache.geode.perftest.jvms.RemoteJVMFactory.RMI_PORT_PROPERTY;
+import static org.junit.Assert.assertFalse;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
@@ -47,12 +51,17 @@
private ChildJVM jvm;
private SystemInterface system;
private Controller controller;
+ private File folder;
@Before
public void setUp() throws IOException, NotBoundException {
system = mock(SystemInterface.class);
+ when(system.getProperty(RMI_HOST)).thenReturn("something");
+ when(system.getProperty(RMI_PORT_PROPERTY)).thenReturn("0");
+ folder = temporaryFolder.newFolder();
+ when(system.getProperty(OUTPUT_DIR)).thenReturn(folder.getAbsolutePath());
rmi = mock(RMI.class);
- jvm = new ChildJVM(rmi, system, 1, temporaryFolder.newFolder());
+ jvm = new ChildJVM(rmi, system, 1);
controller = mock(Controller.class);
when(rmi.lookup(any())).thenReturn(controller);
@@ -75,4 +84,14 @@
verify(controller, times(3)).ping();
}
+ @Test
+ public void childCleansOutputDir() throws IOException {
+ File expectedFile = new File(folder, "somefile.txt");
+ expectedFile.createNewFile();
+
+ jvm.run();
+
+ assertFalse(expectedFile.exists());
+ }
+
}
\ No newline at end of file
diff --git a/harness/src/test/java/org/apache/geode/perftest/yardstick/YardstickTaskTest.java b/harness/src/test/java/org/apache/geode/perftest/yardstick/YardstickTaskTest.java
index e7351e7..8a29d2e 100644
--- a/harness/src/test/java/org/apache/geode/perftest/yardstick/YardstickTaskTest.java
+++ b/harness/src/test/java/org/apache/geode/perftest/yardstick/YardstickTaskTest.java
@@ -17,14 +17,21 @@
package org.apache.geode.perftest.yardstick;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.nio.file.Files;
+
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.apache.geode.perftest.Task;
+import org.apache.geode.perftest.TestContext;
import org.apache.geode.perftest.WorkloadConfig;
import org.apache.geode.perftest.benchmarks.EmptyBenchmark;
+import org.apache.geode.perftest.runner.DefaultTestContext;
public class YardstickTaskTest {
@@ -36,15 +43,17 @@
EmptyBenchmark benchmark = new EmptyBenchmark();
WorkloadConfig workloadConfig = new WorkloadConfig();
workloadConfig.threads(1);
- Task task = new YardstickTask(benchmark, workloadConfig, folder.newFolder().getAbsolutePath());
- task.run(null);
+ Task task = new YardstickTask(benchmark, workloadConfig);
+ File outputDir = folder.newFolder();
+ TestContext context = new DefaultTestContext(null, outputDir);
+ task.run(context);
- Assert.assertTrue(1 <= benchmark.getInvocations());
+ assertTrue(1 <= benchmark.getInvocations());
+
+ assertTrue(Files.walk(outputDir.toPath()).findFirst().isPresent());
//TODO -verify probes are shutdown
//TODO -verify benchmark is shutdown
- //TODO - pass in probes to yardstick util, turn it into a real class
-
}
}
\ No newline at end of file