This is an automated email from the ASF dual-hosted git repository. liujun pushed a commit to branch 3.0 in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit 3a3ef2c60ed9b6319c5c5ae99d72375870405903 Author: ken.lj <[email protected]> AuthorDate: Thu Mar 18 16:40:41 2021 +0800 Fix #7311, try put rpc contex attachments into invocation for Filters may have put new values. (#7399) --- .../dubbo/rpc/cluster/support/AbstractClusterInvoker.java | 10 ++++------ .../dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java | 4 ++-- .../java/org/apache/dubbo/rpc/protocol/AbstractInvoker.java | 5 +++++ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java index 0974fcc..d0544cf 100644 --- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java @@ -29,7 +29,6 @@ import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.Result; import org.apache.dubbo.rpc.RpcContext; import org.apache.dubbo.rpc.RpcException; -import org.apache.dubbo.rpc.RpcInvocation; import org.apache.dubbo.rpc.cluster.ClusterInvoker; import org.apache.dubbo.rpc.cluster.Directory; import org.apache.dubbo.rpc.cluster.LoadBalance; @@ -37,7 +36,6 @@ import org.apache.dubbo.rpc.support.RpcUtils; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_LOADBALANCE; @@ -256,10 +254,10 @@ public abstract class AbstractClusterInvoker<T> implements ClusterInvoker<T> { checkWhetherDestroyed(); // binding attachments into invocation. - Map<String, Object> contextAttachments = RpcContext.getContext().getObjectAttachments(); - if (contextAttachments != null && contextAttachments.size() != 0) { - ((RpcInvocation) invocation).addObjectAttachmentsIfAbsent(contextAttachments); - } +// Map<String, Object> contextAttachments = RpcContext.getContext().getObjectAttachments(); +// if (contextAttachments != null && contextAttachments.size() != 0) { +// ((RpcInvocation) invocation).addObjectAttachmentsIfAbsent(contextAttachments); +// } List<Invoker<T>> invokers = list(invocation); LoadBalance loadbalance = initLoadBalance(invokers, invocation); diff --git a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java index 18796417..b5a235e 100644 --- a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java +++ b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvokerTest.java @@ -17,7 +17,6 @@ package org.apache.dubbo.rpc.cluster.support; import org.apache.dubbo.common.URL; -import org.apache.dubbo.common.URLBuilder; import org.apache.dubbo.common.extension.ExtensionLoader; import org.apache.dubbo.common.utils.NetUtils; import org.apache.dubbo.common.utils.StringUtils; @@ -39,6 +38,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -156,7 +156,7 @@ public class AbstractClusterInvokerTest { } - + @Disabled("RpcContext attachments will be set to Invocation twice, first in ConsumerContextFilter, second AbstractInvoker") @Test public void testBindingAttachment() { final String attachKey = "attach"; diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/protocol/AbstractInvoker.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/protocol/AbstractInvoker.java index 33a9b64..c157c8d 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/protocol/AbstractInvoker.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/protocol/AbstractInvoker.java @@ -145,6 +145,11 @@ public abstract class AbstractInvoker<T> implements Invoker<T> { invocation.addObjectAttachmentsIfAbsent(attachment); } + Map<String, Object> contextAttachments = RpcContext.getContext().getObjectAttachments(); + if (contextAttachments != null && contextAttachments.size() != 0) { + invocation.addObjectAttachmentsIfAbsent(contextAttachments); + } + invocation.setInvokeMode(RpcUtils.getInvokeMode(url, invocation)); RpcUtils.attachInvocationIdIfAsync(getUrl(), invocation);
