@Override
  public Future<Long> readInto(AsyncWritableChannel asyncWritableChannel, Callback<Long> callback) {
    Exception exception;
    if (!channelOpen.get()) {
      exception = new ClosedChannelException();
    } else {
      exception = exceptionToThrow;
    }
    FutureResult<Long> futureResult = new FutureResult<Long>();
    futureResult.done(bytesRead, exception);
    if (callback != null) {
      callback.onCompletion(bytesRead, exception);
    }
    return futureResult;
  }
Either throws the exception provided or returns immediately saying no bytes were read.
@param asyncWritableChannel the {@link AsyncWritableChannel} to read the data into.
@param callback the {@link Callback} that will be invoked either when all the data in the channel has been emptied
                into the {@code asyncWritableChannel} or if there is an exception in doing so. This can be null.
@return a {@link Future} that will eventually contain the result of the operation.
ambry-rest/src/test/java/com/github/ambry/rest/AsyncRequestResponseHandlerTest.java