private AmoroRuntimeException normalize(Throwable throwable) {
    if (throwable instanceof ExecutionException && throwable.getCause() != null) {
      return AmoroRuntimeException.wrap(throwable.getCause());
    }
    return AmoroRuntimeException.wrap(throwable);
  }
Return until completedFuture is done, which means task or process is truly finished
amoro-common/src/main/java/org/apache/amoro/process/SimpleFuture.java