docs: @Override
      @SuppressWarnings("nls")
      public void initialize() {
          try {
              ScheduledExecutorService schedulerService = Executors.newSingleThreadScheduledExecutor();
              CountDownLatch cdl = new CountDownLatch(1);
              Holder<Exception> exception = new Holder<>();
  
              ScheduledFuture<?> sched = schedulerService.scheduleAtFixedRate(() -> {
                  logger.info("Polling for Elasticsearch...");
                  try {
                      esClient.execute(new Health.Builder().build());
                      cdl.countDown();
                  } catch (IOException e) {
                      logger.info("Unable to reach Elasticsearch. Will continue polling.");
                      //System.out.println("Result of polling", e);
                      exception.setValue(e);
                  }
              },
              0, // Start immediately
              1, // Poll every 1 seconds
              TimeUnit.SECONDS);
  
              cdl.await(30, TimeUnit.SECONDS); // Max wait 30 seconds
              sched.cancel(true);
  
              // CDL > 0 means we never successfully hit the health endpoint.
              if (exception.getValue() != null && cdl.getCount() > 0) {
                  throw exception.getValue();
              }
              // TODO Do we need a loop to wait for all nodes to join the cluster?
              Action<JestResult> action = new IndicesExists.Builder(getIndexName()).build();
              synchronized(EsStorage.class) {
                  JestResult result = esClient.execute(action);
                  if (!result.isSucceeded()) {
                      createIndex(getIndexName());
                  }
              }
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
      }