private void proceedWithDelete(String blobId, String serviceId, Callback<Void> callback,
      FutureResult<Void> futureResult) {
    if (blobId == null) {
      throw new IllegalArgumentException("blobId must not be null");
    }
    Exception exception = null;

    try {
      checkBlobId(blobId);
      if (!deletedBlobs.contains(blobId) && blobs.containsKey(blobId)) {
        deletedBlobs.add(blobId);
        undeletedBlobs.remove(blobId);
        if (notificationSystem != null) {
          notificationSystem.onBlobDeleted(blobId, serviceId, null, null);
        }
      } else if (!deletedBlobs.contains(blobId)) {
        exception = new RouterException("Blob not found", RouterErrorCode.BlobDoesNotExist);
      }
    } catch (RouterException e) {
      exception = e;
    } catch (Exception e) {
      exception = new RouterException(e, RouterErrorCode.UnexpectedInternalError);
    } finally {
      completeOperation(futureResult, callback, null, exception);
    }
  }
Helper method to perform delete once the blob Id is available.
ambry-test-utils/src/main/java/com/github/ambry/router/InMemoryRouter.java