private Callback<Void> routerTtlUpdateCallbackForPut(BlobInfo blobInfo) {
      return buildCallback(frontendMetrics.updateBlobTtlRouterMetrics, convertedBlobId -> {
        if (RestUtils.isDatasetVersionQueryEnabled(restRequest.getArgs())) {
          //Make sure to process response after delete finished
          updateVersionStateAndDeleteDatasetVersionOutOfRetentionCount(
              deleteDatasetVersionOutOfRetentionCallback(blobInfo));
        } else {
          securityService.processResponse(restRequest, restResponseChannel, blobInfo,
              securityProcessResponseCallback());
        }
      }, uri, LOGGER, deleteDatasetCallback);
    }
After TTL update finishes, call {@link SecurityService#postProcessRequest} to perform request time security
checks that rely on the request being fully parsed and any additional arguments set.

@param blobInfo the {@link BlobInfo} to use for security checks.
@return a {@link Callback} to be used with {@link Router#updateBlobTtl(String, String, long)}.
ambry-frontend/src/main/java/com/github/ambry/frontend/NamedBlobPutHandler.java