You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by wu...@apache.org on 2020/12/09 15:35:30 UTC

[servicecomb-java-chassis] branch master updated: [SCB-2157] enhance AsyncUtils.tryCatch

This is an automated email from the ASF dual-hosted git repository.

wujimin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new c4ebd3b  [SCB-2157] enhance AsyncUtils.tryCatch
c4ebd3b is described below

commit c4ebd3baa132ff1cfa3f4a60301fb45035798c8e
Author: wujimin <wu...@huawei.com>
AuthorDate: Wed Dec 9 22:58:31 2020 +0800

    [SCB-2157] enhance AsyncUtils.tryCatch
---
 .../java/org/apache/servicecomb/core/filter/FilterNode.java   |  2 +-
 .../servicecomb/core/invocation/ProducerInvocationFlow.java   |  6 ++----
 .../servicecomb/foundation/common/utils/AsyncUtils.java       | 11 ++++++++++-
 3 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/core/src/main/java/org/apache/servicecomb/core/filter/FilterNode.java b/core/src/main/java/org/apache/servicecomb/core/filter/FilterNode.java
index a6f817c..31ac18a 100644
--- a/core/src/main/java/org/apache/servicecomb/core/filter/FilterNode.java
+++ b/core/src/main/java/org/apache/servicecomb/core/filter/FilterNode.java
@@ -82,7 +82,7 @@ public class FilterNode {
       return nextNode.onFilter(invocation);
     }
 
-    return AsyncUtils.tryCatch(() -> filter.onFilter(invocation, nextNode))
+    return AsyncUtils.tryCatchSupplierFuture(() -> filter.onFilter(invocation, nextNode))
         .thenApply(this::rethrowExceptionInResponse);
   }
 
diff --git a/core/src/main/java/org/apache/servicecomb/core/invocation/ProducerInvocationFlow.java b/core/src/main/java/org/apache/servicecomb/core/invocation/ProducerInvocationFlow.java
index 0d0669f..847936d 100644
--- a/core/src/main/java/org/apache/servicecomb/core/invocation/ProducerInvocationFlow.java
+++ b/core/src/main/java/org/apache/servicecomb/core/invocation/ProducerInvocationFlow.java
@@ -16,10 +16,9 @@
  */
 package org.apache.servicecomb.core.invocation;
 
-import java.util.concurrent.CompletableFuture;
-
 import org.apache.servicecomb.core.Invocation;
 import org.apache.servicecomb.core.exception.Exceptions;
+import org.apache.servicecomb.foundation.common.utils.AsyncUtils;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletRequestEx;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx;
 import org.apache.servicecomb.swagger.invocation.Response;
@@ -49,8 +48,7 @@ public abstract class ProducerInvocationFlow {
   }
 
   public void run() {
-    CompletableFuture.completedFuture(null)
-        .thenApply(v -> invocationCreator.create())
+    AsyncUtils.tryCatchSupplier(invocationCreator::create)
         .exceptionally(this::sendCreateInvocationException)
         .thenAccept(this::tryRunInvocation);
   }
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/AsyncUtils.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/AsyncUtils.java
index 3030f88..8f4780e 100644
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/AsyncUtils.java
+++ b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/AsyncUtils.java
@@ -23,7 +23,16 @@ public final class AsyncUtils {
   private AsyncUtils() {
   }
 
-  public static <T> CompletableFuture<T> tryCatch(Supplier<CompletableFuture<T>> supplier) {
+  public static <T> CompletableFuture<T> tryCatchSupplier(Supplier<T> supplier) {
+    try {
+      T value = supplier.get();
+      return CompletableFuture.completedFuture(value);
+    } catch (Throwable e) {
+      return completeExceptionally(e);
+    }
+  }
+
+  public static <T> CompletableFuture<T> tryCatchSupplierFuture(Supplier<CompletableFuture<T>> supplier) {
     try {
       return supplier.get();
     } catch (Throwable e) {