docs: private CompletableFuture<RaftServer> start(Supplier<CompletableFuture<Void>> joiner) {
      if (started) {
        return CompletableFuture.completedFuture(this);
      }
  
      if (openFuture == null) {
        synchronized (this) {
          if (openFuture == null) {
            CompletableFuture<RaftServer> future = new AtomixFuture<>();
            openFuture = future;
            joiner.get().whenComplete((result, error) -> {
              if (error == null) {
                context.awaitState(RaftContext.State.READY, state -> {
                  started = true;
                  future.complete(null);
                });
              } else {
                future.completeExceptionally(error);
              }
            });
          }
        }
      }
  
      return openFuture.whenComplete((result, error) -> {
        if (error == null) {
          log.debug("Server started successfully!");
        } else {
          log.warn("Failed to start server!");
        }
      });
    }