@Override
  public Future<Void> undeleteBlob(String blobId, String serviceId, Callback<Void> callback,
      QuotaChargeCallback quotaChargeCallback) {
    FutureResult<Void> futureResult = new FutureResult<>();
    if (!handlePrechecks(futureResult, callback)) {
      return futureResult;
    }
    Exception exception = null;
    try {
      checkBlobId(blobId);
      if (!blobs.containsKey(blobId)) {
        exception = new RouterException("Blob not found", RouterErrorCode.BlobDoesNotExist);
      } else if (!deletedBlobs.contains(blobId)) {
        exception = new RouterException("Blob not deleted", RouterErrorCode.BlobNotDeleted);
      }
      undeletedBlobs.add(blobId);
      deletedBlobs.remove(blobId);
      if (notificationSystem != null) {
        notificationSystem.onBlobUndeleted(blobId, serviceId, null, null);
      }
    } catch (RouterException e) {
      exception = e;
    } catch (Exception e) {
      exception = new RouterException(e, RouterErrorCode.UnexpectedInternalError);
    } finally {
      completeOperation(futureResult, callback, null, exception);
    }
    return futureResult;
  }
Set the lifeVersion of this blob.
@param lifeVersion The lifeVersion to set.
ambry-test-utils/src/main/java/com/github/ambry/router/InMemoryRouter.java