public Future<ResponseParts> sendRequest(HttpRequest request, ChunkedInput<HttpContent> content,
      Callback<ResponseParts> callback) {
    this.request = request;
    this.content = content;
    this.callback = callback;
    resetState();
    channelConnectFuture.addListener(requestSender);
    return responseFuture;
  }
Sends the request and content to the server and returns a {@link Future} that tracks the arrival of a response for
the request. The {@link Future} and {@code callback} are triggered when the response is complete.
<p/>
Be sure to decrease the reference counts of each of the received response parts via a call to
{@link ReferenceCountUtil#release(Object)} once the part has been processed. Neglecting to do so might result in
OOM.
@param request the request that needs to be sent.
@param content the content accompanying the request. Can be null.
@param callback the callback to invoke when the response is available. Can be null.
@return a {@link Future} that tracks the arrival of the response for this request.
ambry-test-utils/src/main/java/com/github/ambry/rest/NettyClient.java