@Override
  public void downloadBlob(BlobId blobId, OutputStream outputStream) throws CloudStorageException {
    AzureBlobLayoutStrategy.BlobLayout blobLayout = azureBlobLayoutStrategy.getDataBlobLayout(blobId);
    String blobIdStr = blobLayout.blobFilePath;
    BlobContainerClient blobContainerClient = createOrGetBlobStore(blobLayout.containerName);
    Timer.Context storageTimer = azureMetrics.blobDownloadLatency.time();
    try {
      blobContainerClient.getBlobClient(blobIdStr).downloadStream(outputStream);
      azureMetrics.blobDownloadSuccessRate.mark();
    } catch (Throwable e) {
      azureMetrics.blobDownloadErrorCount.inc();
      String error = String.format("Failed to download blob %s from Azure blob storage due to %s",
          blobLayout, e.getMessage());
      logger.error(error);
      throw new CloudStorageException(error);
    } finally {
      if (storageTimer != null) {
        storageTimer.stop();
      }
    } // try-catch
  }
Uploads a stream of blobs to Azure cloud
@param messageSetToWrite Messages replicated from servr
@return Unused boolean
@throws CloudStorageException
ambry-cloud/src/main/java/com/github/ambry/cloud/azure/AzureCloudDestinationSync.java