private void applyDelete(MessageInfo messageInfo, ReplicateBlobRequest replicateBlobRequest) throws StoreException {
    BlobId blobId = replicateBlobRequest.getBlobId();
    Store store = storeManager.getStore(blobId.getPartition());
    try {
      messageInfo = new MessageInfo.Builder(messageInfo).isDeleted(true).isUndeleted(false).build();
      store.delete(Collections.singletonList(messageInfo));
      logger.info("ReplicateBlobRequest applyDelete for {} of {} ", blobId, replicateBlobRequest);
    } catch (StoreException e) {
      // The blob may be deleted or updated which is alright
      if (e.getErrorCode() == StoreErrorCodes.IDDeleted || e.getErrorCode() == StoreErrorCodes.LifeVersionConflict) {
        logger.info("ReplicateBlobRequest applyDelete for {}, Key already updated: {}", blobId, e.getErrorCode());
      } else {
        logger.error("ReplicateBlobRequest applyDelete for {} failed with {}", blobId, e.getErrorCode());
        throw e;
      }
    }
  }
Applies a DELETE update to the blob described by {@code messageInfo}.
@param messageInfo the {@link MessageInfo} that will be transformed into a Delete update
@param replicateBlobRequest the {@link ReplicateBlobRequest}
@throws StoreException
ambry-server/src/main/java/com/github/ambry/server/AmbryRequests.java