public CompletableFuture<Void> downloadBlobAsync(CloudBlobStore blobStore) {
      // Casting blobsize to int, as blobs are chunked in Ambry, and chunk size is 4/8MB.
      // However, if in future, if very large size of blobs are allowed, then prefetching logic should be changed.
      blobContent = PooledByteBufAllocator.DEFAULT.ioBuffer((int) blobMetadata.getSize());
      ByteBufOutputStream outputStream = new ByteBufOutputStream(blobContent);
      return blobStore.downloadBlobAsync(blobMetadata, blobId, outputStream);
    }
Download the {@code blob} from {@code CloudDestination} and put it in {@code blobContent} asynchronously.
@param blobStore {@code CloudBlobStore} implementation representing the cloud from which download will happen.
@return a {@link CompletableFuture} that will eventually complete when the blob is downloaded successfully. If
        the blob could not be downloaded, it will complete exceptionally containing the {@link StoreException}
ambry-cloud/src/main/java/com/github/ambry/cloud/CloudMessageReadSet.java