in harness/src/main/java/org/apache/geode/perftest/jvms/RemoteJVMFactory.java [101:146]
public RemoteJVMs launch(Map<String, Integer> roles,
Map<String, List<String>> jvmArgs) throws Exception {
int numWorkers = roles.values().stream().mapToInt(Integer::intValue).sum();
Infrastructure infra = infrastructureFactory.create(numWorkers);
Set<Infrastructure.Node> nodes = infra.getNodes();
if (nodes.size() < numWorkers) {
throw new IllegalStateException(
"Too few nodes for test. Need " + numWorkers + ", have " + nodes.size());
}
List<JVMMapping> mapping = mapRolesToNodes(roles, nodes, jvmArgs);
Controller controller =
controllerFactory.createController(new SharedContext(mapping), numWorkers);
classPathCopier.copyToNodes(infra, node -> getLibDir(mapping, node));
final List<File> files = new ArrayList<>();
files.add(createKeystore());
final File securityJsonFile = new File("security.json");
FileUtils.copyURLToFile(getClass().getClassLoader().getResource("security.json"),
securityJsonFile);
files.add(securityJsonFile);
if (JavaVersion.current().atLeast(JavaVersion.v17)) {
final File javaArgsFile = new File("java.args");
FileUtils.copyURLToFile(
getClass().getClassLoader().getResource("open-all-jdk-packages-linux-openjdk-17"),
javaArgsFile);
files.add(javaArgsFile);
}
infra.copyToNodes(files, node -> getLibDir(mapping, node), false);
CompletableFuture<Void> processesExited = jvmLauncher.launchProcesses(infra, RMI_PORT, mapping);
if (!controller.waitForWorkers(5, TimeUnit.MINUTES)) {
throw new IllegalStateException("Workers failed to start in 5 minute");
}
return new RemoteJVMs(infra, mapping, controller, processesExited);
}