public static <T, V> Callback<T> buildCallback(AsyncOperationTracker.Metrics metrics,
      ThrowingConsumer<T> successAction, String context, Logger logger, Callback<V> finalCallback) {
    AsyncOperationTracker tracker = new AsyncOperationTracker(context, logger, metrics);
    return CallbackUtils.chainCallback(tracker, finalCallback, successAction);
  }
@param metrics the {@link AsyncOperationTracker.Metrics} instance to update.
@param successAction the action to take if the callback was called successfully.
@param context the context in which this callback is being called (for logging)
@param logger the {@link Logger} instance to use
@param finalCallback the final callback to call once the chain is complete or if it is interrupted
@return the {@link Callback} returned by {@link CallbackUtils#chainCallback}.
ambry-frontend/src/main/java/com/github/ambry/frontend/FrontendUtils.java