private ServerErrorCode repairTtlUpdate(ReplicateBlobRequest replicateBlobRequest, BlobId blobId) {
    ServerErrorCode errorCode = ServerErrorCode.NoError;
    Store store = storeManager.getStore(blobId.getPartition());
    try {
      MessageInfo updateTtlRecord = new MessageInfo.Builder(blobId, -1, blobId.getAccountId(), blobId.getContainerId(),
          replicateBlobRequest.getOperationTimeInMs()).isTtlUpdated(true)
          .expirationTimeInMs(replicateBlobRequest.getExpirationTimeInMs())
          .lifeVersion(replicateBlobRequest.getLifeVersion())
          .build();
      store.updateTtl(Collections.singletonList(updateTtlRecord));
      logger.info("ReplicateBlobRequest forceUpdateTtl blob {} : {}", blobId, updateTtlRecord);
    } catch (StoreException e) { // catch the store write exception
      if (e.getErrorCode() == StoreErrorCodes.AlreadyUpdated || e.getErrorCode() == StoreErrorCodes.IDDeleted
          || e.getErrorCode() == StoreErrorCodes.IDDeletedPermanently) {
        // If it's already updated or deleted, treat it as a success.
        logger.info("ReplicateBlobRequest updateTtl failed {} on Blob {}, but treat it as a success,", e.getErrorCode(),
            blobId);
        errorCode = ServerErrorCode.NoError;
      } else if (e.getErrorCode() == StoreErrorCodes.TTLExpired) {
        logger.error("ReplicateBlobRequest updateTtl failed {} on Blob {}. Failed to update in time!!!",
            e.getErrorCode(), blobId);
        errorCode = ServerErrorCode.BlobExpired;
      } else {
        logger.error("ReplicateBlobRequest updateTtl failed {} on Blob {},", e.getErrorCode(), blobId);
        errorCode = ErrorMapping.getStoreErrorMapping(e.getErrorCode());
      }
    }
    return errorCode;
  }
Get the Blob from the remote replica
@param replicateBlobRequest the {@link ReplicateBlobRequest}
@return a pair of the {@link ServerErrorCode} and the {@link GetResponse}.
ambry-server/src/main/java/com/github/ambry/server/AmbryRequests.java