docs: protected <T extends RaftRequest, U extends RaftResponse> void sendRequest(T request, BiFunction<MemberId, T, CompletableFuture<U>> sender, int count, CompletableFuture<U> future) {
      MemberId node = next();
      if (node != null) {
        log.trace("Sending {} to {}", request, node);
        int selectionId = this.selectionId;
        sender.apply(node, request).whenCompleteAsync((r, e) -> {
          if (e != null || r != null) {
            handleResponse(request, sender, count, selectionId, node, r, e, future);
          } else {
            future.complete(null);
          }
        }, context);
      } else {
        future.completeExceptionally(new ConnectException("Failed to connect to the cluster"));
      }
    }