private void startReadingFromChannel() {
    // The callback will be passed to NettyRequest and will be invoked in the ByteBufferAsyncWritableChannel's
    // resolveOldestChunk method, when it's the last http content chunk. Therefore, when this callback is invoked,
    // the chunk filling process for this PutOperation is finished.
    channel.readInto(chunkFillerChannel, (result, exception) -> {
      if (exception != null) {
        logger.info("{}: ChannelRead has exception, will terminate the operation", loggingContext, exception);
        setOperationExceptionAndComplete(exception);
        routerCallback.onPollReady();
      } else {
        blobSize = result;
        chunkFillingCompletedSuccessfully = true;
      }
      chunkFillerChannel.close();
    });
  }
Start reading from the channel containing the data for this operation.
ambry-router/src/main/java/com/github/ambry/router/PutOperation.java