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) {
- }
}