private BatchDeletePartitionResponseInfo batchDeleteForPartition(BatchDeleteRequest batchDeleteRequest, BatchDeletePartitionRequestInfo batchDeletePartitionRequestInfo)
      throws Exception {
    List<MessageInfo> infoList = new ArrayList<>();
    List<StoreKey> convertedStoreKeys = getConvertedStoreKeys(batchDeletePartitionRequestInfo.getBlobIds());
    for (StoreKey convertedStoreKey : convertedStoreKeys) {
      BlobId convertedBlobId = (BlobId) convertedStoreKey;
      infoList.add(new MessageInfo.Builder(convertedBlobId, -1, convertedBlobId.getAccountId(),
          convertedBlobId.getContainerId(), batchDeleteRequest.getDeletionTimeInMs()).isDeleted(true)
          .lifeVersion(MessageInfo.LIFE_VERSION_FROM_FRONTEND)
          .build());
    }
    Store storeToDeleteFrom = storeManager.getStore(batchDeletePartitionRequestInfo.getPartition());
    StoreBatchDeleteInfo storeBatchDeleteInfo = storeToDeleteFrom.batchDelete(infoList);
    List<BlobDeleteStatus> blobDeleteStatuses = new ArrayList<>();
    for (MessageErrorInfo messageErrorInfo : storeBatchDeleteInfo.getMessageErrorInfos()){
      ServerErrorCode msgInfoServerErrorCode = messageErrorInfo.getError() == null ? ServerErrorCode.NoError
          : ErrorMapping.getStoreErrorMapping(messageErrorInfo.getError());
      blobDeleteStatuses.add(new BlobDeleteStatus((BlobId)messageErrorInfo.getMessageInfo().getStoreKey(), msgInfoServerErrorCode));
    }
    if (notification != null) {
      for (StoreKey convertedStoreKey : convertedStoreKeys) {
        notification.onBlobReplicaDeleted(currentNode.getHostname(), currentNode.getPort(),
            convertedStoreKey.getID(), BlobReplicaSourceType.PRIMARY);
      }
    }
    return new BatchDeletePartitionResponseInfo(batchDeletePartitionRequestInfo.getPartition(), blobDeleteStatuses);
  }
Prepares infoList @link{List<MessageInfo>} for the blobs to be deleted in a partition and calls store.batchDelete.
Also, calls handler for notification on blob replica deleted.
@param batchDeleteRequest the {@Link BatchDeleteRequest} is the input from frontend.
@param batchDeletePartitionRequestInfo the {@Link BatchDeletePartitionRequestInfo} for the partition where Batch_Delete is to be performed.
@return the {@Link BatchDeletePartitionResponseInfo} having a list of {@Link BlobDeleteStatus} for the status of blobs requested to be deleted.
ambry-server/src/main/java/com/github/ambry/server/AmbryRequests.java