public RemoteJVMs launch()

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);
  }