@Override
  public void downloadBlob(BlobId blobId, OutputStream outputStream) throws CloudStorageException {
    StoreErrorCodes serverError = hardError != null ? hardError : serverErrors.size() > 0 ? serverErrors.poll() : null;
    if (serverError != null) {
      throw new CloudStorageException("downloadBlob simulated error for blobid :" + blobId,
          new StoreException("downloadBlob simulated error for blobid :" + blobId, serverError));
    }

    try {
      if (!map.containsKey(blobId)) {
        throw new CloudStorageException("Blob with blobId " + blobId.getID() + " does not exist.");
      }
      byte[] blobData = map.get(blobId).getSecond();
      outputStream.write(blobData);
    } catch (IOException ex) {
      throw new CloudStorageException(
          "Could not download blob for blobid " + blobId.getID() + " due to " + ex.toString());
    }
    downloadLatch.countDown();
  }
Instantiate {@link LatchBasedInMemoryCloudDestination}.
@param blobIdsToTrack a list of blobs that {@link LatchBasedInMemoryCloudDestination} tracks.
@param azureReplicationFeedType {@link AzureReplicationFeed.FeedType} object.
ambry-vcr/src/test/java/com/github/ambry/vcr/LatchBasedInMemoryCloudDestination.java