@Override
        public void onCompletion(Long result, Exception exception) {
          String operationResult = null;
          if (exception == null && (result == null || (channel.getSize() != -1 && result != channel.getSize()))) {
            exception = new IllegalStateException("The content was not completely read");
          } else if (exception == null) {
            logger.debug("Total bytes read - {}", result);
            perfRouterMetrics.putSizeInBytes.update(result);
            operationResult = PerfRouter.BLOB_ID;
          }
          perfRouterMetrics.putContentConsumeTimeInMs.update(System.currentTimeMillis() - putConsumeStartTime);
          completeOperation(futureResult, callback, operationResult, exception);
        }
Consumes the data in {@code channel} and simply throws it away. {@code blobProperties} and {@code usermetadata} are
ignored.

@param restRequest    The {@link RestRequest} to put the blob.
@param blobProperties The properties of the blob.
@param usermetadata   Optional user metadata about the blob. This can be null.
@param channel        The {@link ReadableStreamChannel} that contains the content of the blob.
@param options        the {@link PutBlobOptions} for the blob.
@param callback       the {@link Callback} to invoke on operation completion.
@return a {@link Future} that will contain a (dummy) blob id.
ambry-tools/src/main/java/com/github/ambry/tools/perf/rest/PerfRouter.java