public CompletableFuture<Void> uploadFileAsync(String containerName, String fileName, InputStream inputStream)
      throws Exception {
    return FutureUtils.orTimeout(
        storageClient.uploadWithResponse(containerName, fileName, true, inputStream, inputStream.available(), null,
            null, null, null, defaultRequestConditions), uploadTimeout);
  }
Upload a file to blob storage asynchronously.  Any existing file with the same name will be replaced.
@param containerName name of the container where blob is stored.
@param fileName the blob filename.
@param inputStream the input stream to use for upload.
@throws BlobStorageException for any error on ABS side.
@throws IOException for any error with supplied data stream.
@return a CompletableFuture of type Void that will eventually complete when block blob is uploaded or an exception
        if an error occurred.
ambry-cloud/src/main/java/com/github/ambry/cloud/azure/AzureBlobDataAccessor.java