@Override
  protected void deleteBlob(final String blobIdStr, final String serviceId, FutureResult<Void> futureResult,
      final Callback<Void> callback, boolean attemptChunkDeletes, QuotaChargeCallback quotaChargeCallback) {
    Supplier<Void> deleteCall = () -> {
      super.deleteBlob(blobIdStr, serviceId, futureResult, (Void result, Exception e) -> {
        callback.onCompletion(result, e);
        concurrentBackgroundDeleteOperationCount.decrementAndGet();
      }, attemptChunkDeletes, quotaChargeCallback);
      return null;
    };
    if (routerConfig.routerBackgroundDeleterMaxConcurrentOperations > 0) {
      deleteOperationQueue.offer(deleteCall);
    } else {
      concurrentBackgroundDeleteOperationCount.incrementAndGet();
      deleteCall.get();
    }
  }
{@inheritDoc}

If the maximum concurrent number of background delete operation in router configuration is not 0, then this delete
operation will be enqueued to a thread-safe queue and delete operations will be executed later.
ambry-router/src/main/java/com/github/ambry/router/OperationController.java