code: public List<Endpoint> awaitInitialEndpoints(long timeout, TimeUnit unit)
              throws InterruptedException, TimeoutException {
          try {
              return initialEndpointsFuture.get(timeout, unit);
          } catch (ExecutionException e) {
              throw new CompletionException(e.getCause());
          }
      }
docs: Waits until the initial {@link Endpoint}s are ready, with timeout.
  
  @throws CancellationException if {@link #close()} was called before the initial {@link Endpoint}s are set
  @throws TimeoutException if the initial {@link Endpoint}s are not set until timeout