public NodesStressTest build(Settings settings) throws Exception {
    settings =
        settingsBuilder()
            //                .put("index.engine.robin.refreshInterval", 1, TimeUnit.SECONDS)
            .put(SETTING_NUMBER_OF_SHARDS, 5)
            .put(SETTING_NUMBER_OF_REPLICAS, 1)
            .put(settings)
            .build();

    nodes = new Node[numberOfNodes];
    clients = new Client[numberOfNodes];
    for (int i = 0; i < numberOfNodes; i++) {
      nodes[i] =
          nodeBuilder().settings(settingsBuilder().put(settings).put("name", "node" + i)).node();
      clients[i] = nodes[i].client();
    }

    for (int i = 0; i < searcherThreads.length; i++) {
      searcherThreads[i] = new Searcher(i);
    }
    for (int i = 0; i < indexThreads.length; i++) {
      indexThreads[i] = new Indexer(i);
    }

    latch = new CountDownLatch(1);
    barrier1 = new CyclicBarrier(2);
    barrier2 = new CyclicBarrier(2);
    // warmup
    StopWatch stopWatch = new StopWatch().start();
    Indexer warmup = new Indexer(-1).max(10000);
    warmup.start();
    barrier1.await();
    barrier2.await();
    latch.await();
    stopWatch.stop();
    System.out.println("Done Warmup, took [" + stopWatch.totalTime() + "]");

    latch = new CountDownLatch(searcherThreads.length + indexThreads.length);
    barrier1 = new CyclicBarrier(searcherThreads.length + indexThreads.length + 1);
    barrier2 = new CyclicBarrier(searcherThreads.length + indexThreads.length + 1);

    return this;
  }