public void complete() {
    try {
      CompletableFuture<?> originalFuture = triggerFuture;
      if (triggerFuture.complete(null)) {
        if (triggerFuture == originalFuture) {
          callbackFuture.get();
        }
      }
    } catch (Throwable throwable) {
      throw normalize(throwable);
    }
  }
This method will trigger all callback functions in the same thread and wait until all callback
functions are completed. If throws exception, completedFuture is not done. Pay attention that
reset could be called during whenCompleted runnable, should ignore waiting
amoro-common/src/main/java/org/apache/amoro/process/SimpleFuture.java