You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2020/02/03 10:13:19 UTC

[servicecomb-java-chassis] branch master updated: [SCB-1740]RouterInvokeFilter beforeSendResponseAsync return null and cause server hang without any information

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

liubao 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 ffe64ad  [SCB-1740]RouterInvokeFilter beforeSendResponseAsync return null and cause server hang without any information
ffe64ad is described below

commit ffe64ad11f8758e3b61f7a091d95c03216ac8e2d
Author: liubao <bi...@qq.com>
AuthorDate: Mon Feb 3 16:53:27 2020 +0800

    [SCB-1740]RouterInvokeFilter beforeSendResponseAsync return null and cause server hang without any information
---
 ...HttpServerFilterBeforeSendResponseExecutor.java | 14 +++++++++++---
 .../router/custom/RouterInvokeFilter.java          | 22 ++--------------------
 2 files changed, 13 insertions(+), 23 deletions(-)

diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/HttpServerFilterBeforeSendResponseExecutor.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/HttpServerFilterBeforeSendResponseExecutor.java
index 2c6e1f4..d96f3f8 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/HttpServerFilterBeforeSendResponseExecutor.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/HttpServerFilterBeforeSendResponseExecutor.java
@@ -49,14 +49,22 @@ public class HttpServerFilterBeforeSendResponseExecutor {
   protected CompletableFuture<Void> safeInvoke(HttpServerFilter httpServerFilter) {
     try {
       if (httpServerFilter.enabled()) {
-        return httpServerFilter.beforeSendResponseAsync(invocation, responseEx);
+        CompletableFuture<Void> future = httpServerFilter.beforeSendResponseAsync(invocation, responseEx);
+        if (future == null) {
+          future = new CompletableFuture<>();
+          future.completeExceptionally(new IllegalStateException(
+              "HttpServerFilter beforeSendResponseAsync can not return null, do not override it. Class="
+                  + httpServerFilter.getClass()
+                  .getName()));
+        }
+        return future;
       } else {
-        CompletableFuture<Void> eFuture = new CompletableFuture<Void>();
+        CompletableFuture<Void> eFuture = new CompletableFuture<>();
         eFuture.complete(null);
         return eFuture;
       }
     } catch (Throwable e) {
-      CompletableFuture<Void> eFuture = new CompletableFuture<Void>();
+      CompletableFuture<Void> eFuture = new CompletableFuture<>();
       eFuture.completeExceptionally(e);
       return eFuture;
     }
diff --git a/handlers/handler-router/src/main/java/org/apache/servicecomb/router/custom/RouterInvokeFilter.java b/handlers/handler-router/src/main/java/org/apache/servicecomb/router/custom/RouterInvokeFilter.java
index e97a7e9..053f0de 100644
--- a/handlers/handler-router/src/main/java/org/apache/servicecomb/router/custom/RouterInvokeFilter.java
+++ b/handlers/handler-router/src/main/java/org/apache/servicecomb/router/custom/RouterInvokeFilter.java
@@ -16,20 +16,15 @@
  */
 package org.apache.servicecomb.router.custom;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.netflix.config.DynamicStringProperty;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.CompletableFuture;
 
 import org.apache.servicecomb.common.rest.filter.HttpServerFilter;
 import org.apache.servicecomb.core.Invocation;
-import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.foundation.common.utils.JsonUtils;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletRequestEx;
-import org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx;
 import org.apache.servicecomb.router.cache.RouterRuleCache;
 import org.apache.servicecomb.swagger.invocation.Response;
 import org.slf4j.Logger;
@@ -38,7 +33,9 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 import org.yaml.snakeyaml.Yaml;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.netflix.config.DynamicPropertyFactory;
+import com.netflix.config.DynamicStringProperty;
 
 public class RouterInvokeFilter implements HttpServerFilter {
 
@@ -61,11 +58,6 @@ public class RouterInvokeFilter implements HttpServerFilter {
     return true;
   }
 
-  @Override
-  public boolean needCacheRequest(OperationMeta operationMeta) {
-    return false;
-  }
-
   /**
    * pass through headers
    *
@@ -155,14 +147,4 @@ public class RouterInvokeFilter implements HttpServerFilter {
     });
     return headerMap;
   }
-
-  @Override
-  public CompletableFuture<Void> beforeSendResponseAsync(Invocation invocation,
-      HttpServletResponseEx responseEx) {
-    return null;
-  }
-
-  @Override
-  public void beforeSendResponse(Invocation invocation, HttpServletResponseEx responseEx) {
-  }
 }