docs: private void doRemoveRemoteSource(RequestErrorTracker errorTracker, Request request, SettableFuture<?> future)
      {
          errorTracker.startRequest();
  
          FutureCallback<StatusResponse> callback = new FutureCallback<StatusResponse>() {
              @Override
              public void onSuccess(@Nullable StatusResponse response)
              {
                  if (response == null) {
                      throw new PrestoException(GENERIC_INTERNAL_ERROR, "Request failed with null response");
                  }
                  if (response.getStatusCode() != OK.code()) {
                      throw new PrestoException(GENERIC_INTERNAL_ERROR, "Request failed with HTTP status " + response.getStatusCode());
                  }
                  future.set(null);
              }
  
              @Override
              public void onFailure(Throwable failedReason)
              {
                  if (failedReason instanceof RejectedExecutionException && httpClient.isClosed()) {
                      log.error("Unable to destroy exchange source at %s. HTTP client is closed", request.getUri());
                      future.setException(failedReason);
                      return;
                  }
                  // record failure
                  try {
                      errorTracker.requestFailed(failedReason);
                  }
                  catch (PrestoException e) {
                      future.setException(e);
                      return;
                  }
                  // if throttled due to error, asynchronously wait for timeout and try again
                  ListenableFuture<?> errorRateLimit = errorTracker.acquireRequestPermit();
                  if (errorRateLimit.isDone()) {
                      doRemoveRemoteSource(errorTracker, request, future);
                  }
                  else {
                      errorRateLimit.addListener(() -> doRemoveRemoteSource(errorTracker, request, future), errorScheduledExecutor);
                  }
              }
          };
  
          addCallback(httpClient.executeAsync(request, createStatusResponseHandler()), callback, directExecutor());
      }