This is an automated email from the ASF dual-hosted git repository.
crazyhzm pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0 by this push:
new 904703eb22 Fix CallbackRegistrationInvoker skip when throw exception
(#10349)
904703eb22 is described below
commit 904703eb2265baa3e210da815f9db3d5ea0e66d8
Author: Albumen Kevin <[email protected]>
AuthorDate: Wed Jul 27 11:02:55 2022 +0800
Fix CallbackRegistrationInvoker skip when throw exception (#10349)
---
.../org/apache/dubbo/rpc/cluster/filter/FilterChainBuilder.java | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/FilterChainBuilder.java
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/FilterChainBuilder.java
index c01c5b67a9..2911eac412 100644
---
a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/FilterChainBuilder.java
+++
b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/FilterChainBuilder.java
@@ -192,6 +192,7 @@ public interface FilterChainBuilder {
public Result invoke(Invocation invocation) throws RpcException {
Result asyncResult = filterInvoker.invoke(invocation);
asyncResult.whenCompleteWithContext((r, t) -> {
+ RuntimeException filterRuntimeException = null;
for (int i = filters.size() - 1; i >= 0; i--) {
FILTER filter = filters.get(i);
try {
@@ -218,14 +219,18 @@ public interface FilterChainBuilder {
listener.onError(t, filterInvoker, invocation);
}
}
- } catch (Throwable filterThrowable) {
+ } catch (RuntimeException runtimeException) {
LOGGER.error(String.format("Exception occurred while
executing the %s filter named %s.", i, filter.getClass().getSimpleName()));
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(String.format("Whole filter list is:
%s", filters.stream().map(tmpFilter ->
tmpFilter.getClass().getSimpleName()).collect(Collectors.toList())));
}
- throw filterThrowable;
+ filterRuntimeException = runtimeException;
+ t = runtimeException;
}
}
+ if (filterRuntimeException != null) {
+ throw filterRuntimeException;
+ }
});
return asyncResult;