private Callback<Void> securityPostProcessRequestCallback() {
      return buildCallback(metrics.deleteBlobSecurityPostProcessRequestMetrics, result -> {
        String serviceId = RestUtils.getHeader(restRequest.getArgs(), RestUtils.Headers.SERVICE_ID, false);
        if (RestUtils.isDatasetVersionQueryEnabled(restRequest.getArgs())) {
          accountAndContainerInjector.injectDatasetForNamedBlob(restRequest);
          String datasetVersionPathString = getRequestPath(restRequest).getOperationOrBlobId(false);
          DatasetVersionRecord datasetVersionRecord =
              getDatasetVersionHelper(restRequest, datasetVersionPathString, accountService, metrics);
          if (datasetVersionRecord.getRenameFrom() != null) {
            RequestPath requestPath = getRequestPath(restRequest);
            RequestPath newRequestPath = reconstructRequestPath(datasetVersionRecord, requestPath,
                ((Account) restRequest.getArgs().get(InternalKeys.TARGET_ACCOUNT_KEY)).getName(),
                ((Container) restRequest.getArgs().get(InternalKeys.TARGET_CONTAINER_KEY)).getName());
            restRequest.setArg(InternalKeys.REQUEST_PATH, newRequestPath);
          }
        }
        router.deleteBlob(restRequest, null, serviceId, routerCallback(),
            QuotaUtils.buildQuotaChargeCallback(restRequest, quotaManager, false));
      }, restRequest.getUri(), LOGGER, finalCallback);
    }
After {@link SecurityService#postProcessRequest} finishes, call {@link Router#deleteBlob} to delete
the blob in the storage layer.
@return a {@link Callback} to be used with {@link SecurityService#postProcessRequest}.
ambry-frontend/src/main/java/com/github/ambry/frontend/DeleteBlobHandler.java