public Future<String> putBlobWithIdVersion(BlobProperties blobProperties, byte[] usermetadata,
      ReadableStreamChannel channel, Short blobIdVersion) {
    FutureResult<String> futureResult = new FutureResult<>();
    PostData postData =
        new PostData(blobProperties, usermetadata, channel, null, PutBlobOptions.DEFAULT, null, futureResult);
    operationPool.submit(new InMemoryBlobPoster(postData, blobs, notificationSystem, clusterMap, blobIdVersion));
    return futureResult;
  }
Put a blob with a specific blob ID version. Used for testing response path processing of such blobs.
@param blobProperties The properties of the blob. Note that the size specified in the properties is ignored. The
                      channel is consumed fully, and the size of the blob is the number of bytes read from it.
@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 blobIdVersion The blob ID version to use. The request will fail if this isn't a valid blob ID version.
@return A future that would contain the BlobId eventually.
ambry-test-utils/src/main/java/com/github/ambry/router/InMemoryRouter.java