private void proceedWithDelete(String blobId, String serviceId, Callback<Void> callback,
      FutureResult<Void> futureResult, QuotaChargeCallback quotaChargeCallback) {
    currentOperationsCount.incrementAndGet();
    routerMetrics.deleteBlobOperationRate.mark();
    routerMetrics.operationQueuingRate.mark();

    if (blobId == null) {
      throw new IllegalArgumentException("blobId must not be null");
    }

    if (isOpen.get()) {
      if (notFoundCache.getIfPresent(blobId) != null) {
        // If we know that blob doesn't exist, complete the operation
        logger.info("Blob {} is known to be missing in servers", blobId);
        RouterException routerException =
            new RouterException("DeleteOperation failed because of BlobNotFound", RouterErrorCode.BlobDoesNotExist);
        completeOperation(futureResult, callback, null, routerException);
      } else {
        // Can skip attemptChunkDeletes if we can determine this is not a metadata blob
        boolean attemptChunkDeletes = isMaybeMetadataBlob(blobId);
        getOperationController().deleteBlob(blobId, serviceId, futureResult,
            new BlobOperationCallbackWrapper<>(blobId, callback), attemptChunkDeletes, quotaChargeCallback);
        if (!attemptChunkDeletes) {
          routerMetrics.skippedGetBlobCount.inc();
        }
      }
    } else {
      RouterException routerException =
          new RouterException("Cannot accept operation because Router is closed", RouterErrorCode.RouterClosed);
      routerMetrics.operationDequeuingRate.mark();
      routerMetrics.onDeleteBlobError(routerException);
      completeOperation(futureResult, callback, null, routerException);
    }
  }
Helper method to perform delete once the blob Id is available.
ambry-router/src/main/java/com/github/ambry/router/NonBlockingRouter.java