default CompletableFuture<GetBlobResult> getBlob(String blobId, GetBlobOptions options) {
    CompletableFuture<GetBlobResult> future = new CompletableFuture<>();
    getBlob(blobId, options, CallbackUtils.fromCompletableFuture(future), null);
    return future;
  }
Requests for blob (info, data, or both) asynchronously with user-set {@link GetBlobOptions} and returns a future
that will eventually contain a {@link GetBlobResult} that can contain either the {@link BlobInfo}, the
{@link ReadableStreamChannel} containing the blob data, or both.
@param blobId The ID of the blob for which blob data is requested.
@param options The options associated with the request.
@return A future that would eventually contain a {@link GetBlobResult} that can contain either
        the {@link BlobInfo}, the {@link ReadableStreamChannel} containing the blob data, or both.
ambry-api/src/main/java/com/github/ambry/router/Router.java