public static <T> void callCallbackAfter(CompletionStage<T> completionStage, Callback<T> callback) {
    completionStage.whenComplete(
        (result, throwable) -> callback.onCompletion(result, Utils.extractFutureExceptionCause(throwable)));
  }
Call an Ambry callback when a {@link CompletionStage} is completed, appropriately handling exception wrapping
by the future implementation.
@param completionStage the {@link CompletionStage} to attach to.
@param callback the {@link Callback} to call upon completion.
@param <T> the type of the future and callback.
ambry-api/src/main/java/com/github/ambry/commons/CallbackUtils.java