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

jimin pushed a commit to branch 2.1.0
in repository https://gitbox.apache.org/repos/asf/incubator-seata.git


The following commit(s) were added to refs/heads/2.1.0 by this push:
     new f8dfd1f2f9 bugfix: fix Alibaba Dubbo convert error (#6675)
f8dfd1f2f9 is described below

commit f8dfd1f2f9334ae958d75979a3189ed139d0e1d3
Author: jimin <[email protected]>
AuthorDate: Sun Jul 14 00:27:50 2024 +0800

    bugfix: fix Alibaba Dubbo convert error (#6675)
---
 .../AlibabaDubboTransactionConsumerFilter.java     | 63 ++++++++++++++++++++++
 ... => AlibabaDubboTransactionProviderFilter.java} | 42 ++++++---------
 .../META-INF/services/com.alibaba.dubbo.rpc.Filter |  3 +-
 ...ibabaDubboTransactionPropagationFilterTest.java | 11 ++--
 4 files changed, 86 insertions(+), 33 deletions(-)

diff --git 
a/integration/dubbo-alibaba/src/main/java/org/apache/seata/integration/dubbo/alibaba/AlibabaDubboTransactionConsumerFilter.java
 
b/integration/dubbo-alibaba/src/main/java/org/apache/seata/integration/dubbo/alibaba/AlibabaDubboTransactionConsumerFilter.java
new file mode 100644
index 0000000000..0bf6a1ea72
--- /dev/null
+++ 
b/integration/dubbo-alibaba/src/main/java/org/apache/seata/integration/dubbo/alibaba/AlibabaDubboTransactionConsumerFilter.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.seata.integration.dubbo.alibaba;
+
+import com.alibaba.dubbo.common.extension.Activate;
+import com.alibaba.dubbo.rpc.Filter;
+import com.alibaba.dubbo.rpc.Invocation;
+import com.alibaba.dubbo.rpc.Invoker;
+import com.alibaba.dubbo.rpc.Result;
+import com.alibaba.dubbo.rpc.RpcContext;
+import com.alibaba.dubbo.rpc.RpcException;
+
+import org.apache.seata.core.constants.DubboConstants;
+import org.apache.seata.core.context.RootContext;
+import org.apache.seata.core.model.BranchType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The type Alibaba dubbo transaction consumer filter.
+ */
+@Activate(group = {DubboConstants.CONSUMER}, order = 100)
+public class AlibabaDubboTransactionConsumerFilter implements Filter {
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(AlibabaDubboTransactionConsumerFilter.class);
+
+    @Override
+    public Result invoke(Invoker<?> invoker, Invocation invocation) throws 
RpcException {
+        if (!DubboConstants.ALIBABADUBBO) {
+            return invoker.invoke(invocation);
+        }
+        String xid = RootContext.getXID();
+        BranchType branchType = RootContext.getBranchType();
+
+        if (LOGGER.isDebugEnabled()) {
+            LOGGER.debug("consumer xid in RootContext[{}], branchType in 
RootContext[{}]", xid, branchType);
+        }
+        if (xid != null) {
+            RpcContext.getContext().setAttachment(RootContext.KEY_XID, xid);
+            RpcContext.getContext().setAttachment(RootContext.KEY_BRANCH_TYPE, 
branchType.name());
+        }
+        try {
+            return invoker.invoke(invocation);
+        } finally {
+            RpcContext.getContext().removeAttachment(RootContext.KEY_XID);
+            
RpcContext.getContext().removeAttachment(RootContext.KEY_BRANCH_TYPE);
+        }
+    }
+}
diff --git 
a/integration/dubbo-alibaba/src/main/java/org/apache/seata/integration/dubbo/alibaba/AlibabaDubboTransactionPropagationFilter.java
 
b/integration/dubbo-alibaba/src/main/java/org/apache/seata/integration/dubbo/alibaba/AlibabaDubboTransactionProviderFilter.java
similarity index 74%
rename from 
integration/dubbo-alibaba/src/main/java/org/apache/seata/integration/dubbo/alibaba/AlibabaDubboTransactionPropagationFilter.java
rename to 
integration/dubbo-alibaba/src/main/java/org/apache/seata/integration/dubbo/alibaba/AlibabaDubboTransactionProviderFilter.java
index c36ef633bc..fe8a1640db 100644
--- 
a/integration/dubbo-alibaba/src/main/java/org/apache/seata/integration/dubbo/alibaba/AlibabaDubboTransactionPropagationFilter.java
+++ 
b/integration/dubbo-alibaba/src/main/java/org/apache/seata/integration/dubbo/alibaba/AlibabaDubboTransactionProviderFilter.java
@@ -23,51 +23,41 @@ import com.alibaba.dubbo.rpc.Invoker;
 import com.alibaba.dubbo.rpc.Result;
 import com.alibaba.dubbo.rpc.RpcContext;
 import com.alibaba.dubbo.rpc.RpcException;
+
 import org.apache.seata.common.util.StringUtils;
-import org.apache.seata.core.context.RootContext;
 import org.apache.seata.core.constants.DubboConstants;
+import org.apache.seata.core.context.RootContext;
 import org.apache.seata.core.model.BranchType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * The type Transaction propagation filter.
- *
+ * The type Alibaba dubbo transaction provider filter.
  */
-@Activate(group = {DubboConstants.PROVIDER, DubboConstants.CONSUMER}, order = 
100)
-public class AlibabaDubboTransactionPropagationFilter implements Filter {
+@Activate(group = {DubboConstants.PROVIDER}, order = 100)
+public class AlibabaDubboTransactionProviderFilter implements Filter {
 
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(AlibabaDubboTransactionPropagationFilter.class);
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(AlibabaDubboTransactionProviderFilter.class);
 
     @Override
     public Result invoke(Invoker<?> invoker, Invocation invocation) throws 
RpcException {
         if (!DubboConstants.ALIBABADUBBO) {
             return invoker.invoke(invocation);
         }
-        String xid = RootContext.getXID();
-        BranchType branchType = RootContext.getBranchType();
-
         String rpcXid = getRpcXid();
         String rpcBranchType = 
RpcContext.getContext().getAttachment(RootContext.KEY_BRANCH_TYPE);
         if (LOGGER.isDebugEnabled()) {
-            LOGGER.debug("xid in RootContext[{}] xid in RpcContext[{}]", xid, 
rpcXid);
+            LOGGER.debug("xid in RpcContext[{}], branchType in 
RpcContext[{}]", rpcXid, rpcBranchType);
         }
         boolean bind = false;
-        if (xid != null) {
-            RpcContext.getContext().setAttachment(RootContext.KEY_XID, xid);
-            RpcContext.getContext().setAttachment(RootContext.KEY_BRANCH_TYPE, 
branchType.name());
-        } else {
-            if (rpcXid != null) {
-                RootContext.bind(rpcXid);
-                if (StringUtils.equals(BranchType.TCC.name(), rpcBranchType)) {
-                    RootContext.bindBranchType(BranchType.TCC);
-                }
-                bind = true;
-                if (LOGGER.isDebugEnabled()) {
-                    LOGGER.debug("bind xid [{}] branchType [{}] to 
RootContext", rpcXid, rpcBranchType);
-                }
+        if (rpcXid != null) {
+            RootContext.bind(rpcXid);
+            if (StringUtils.equals(BranchType.TCC.name(), rpcBranchType)) {
+                RootContext.bindBranchType(BranchType.TCC);
             }
+            bind = true;
         }
+
         try {
             return invoker.invoke(invocation);
         } finally {
@@ -82,7 +72,7 @@ public class AlibabaDubboTransactionPropagationFilter 
implements Filter {
                 }
                 if (!rpcXid.equalsIgnoreCase(unbindXid)) {
                     LOGGER.warn("xid in change during RPC from {} to 
{},branchType from {} to {}", rpcXid, unbindXid,
-                        rpcBranchType != null ? rpcBranchType : 
BranchType.AT,previousBranchType);
+                        rpcBranchType != null ? rpcBranchType : BranchType.AT, 
previousBranchType);
                     if (unbindXid != null) {
                         RootContext.bind(unbindXid);
                         LOGGER.warn("bind xid [{}] back to RootContext", 
unbindXid);
@@ -93,8 +83,6 @@ public class AlibabaDubboTransactionPropagationFilter 
implements Filter {
                     }
                 }
             }
-            RpcContext.getContext().removeAttachment(RootContext.KEY_XID);
-            
RpcContext.getContext().removeAttachment(RootContext.KEY_BRANCH_TYPE);
             
RpcContext.getServerContext().removeAttachment(RootContext.KEY_XID);
             
RpcContext.getServerContext().removeAttachment(RootContext.KEY_BRANCH_TYPE);
         }
@@ -102,6 +90,7 @@ public class AlibabaDubboTransactionPropagationFilter 
implements Filter {
 
     /**
      * get rpc xid
+     *
      * @return
      */
     private String getRpcXid() {
@@ -111,5 +100,4 @@ public class AlibabaDubboTransactionPropagationFilter 
implements Filter {
         }
         return rpcXid;
     }
-
 }
diff --git 
a/integration/dubbo-alibaba/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Filter
 
b/integration/dubbo-alibaba/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Filter
index 88c7a4aa61..372654bb99 100644
--- 
a/integration/dubbo-alibaba/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Filter
+++ 
b/integration/dubbo-alibaba/src/main/resources/META-INF/services/com.alibaba.dubbo.rpc.Filter
@@ -1 +1,2 @@
-org.apache.seata.integration.dubbo.alibaba.AlibabaDubboTransactionPropagationFilter
\ No newline at end of file
+org.apache.seata.integration.dubbo.alibaba.AlibabaDubboTransactionConsumerFilter
+org.apache.seata.integration.dubbo.alibaba.AlibabaDubboTransactionProviderFilter
\ No newline at end of file
diff --git 
a/integration/dubbo-alibaba/src/test/java/org/apache/seata/integration/dubbo/alibaba/AlibabaDubboTransactionPropagationFilterTest.java
 
b/integration/dubbo-alibaba/src/test/java/org/apache/seata/integration/dubbo/alibaba/AlibabaDubboTransactionPropagationFilterTest.java
index f627d35f71..e07da394f6 100644
--- 
a/integration/dubbo-alibaba/src/test/java/org/apache/seata/integration/dubbo/alibaba/AlibabaDubboTransactionPropagationFilterTest.java
+++ 
b/integration/dubbo-alibaba/src/test/java/org/apache/seata/integration/dubbo/alibaba/AlibabaDubboTransactionPropagationFilterTest.java
@@ -17,6 +17,7 @@
 package org.apache.seata.integration.dubbo.alibaba;
 
 import com.alibaba.dubbo.rpc.RpcContext;
+
 import org.apache.seata.core.context.RootContext;
 import org.apache.seata.core.model.BranchType;
 import org.apache.seata.integration.dubbo.alibaba.mock.MockInvoker;
@@ -24,19 +25,18 @@ import org.junit.jupiter.api.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-
 public class AlibabaDubboTransactionPropagationFilterTest {
 
     private static final String DEFAULT_XID = "1234567890";
 
     @Test
     public void testInvoke_And_RootContext() {
-        AlibabaDubboTransactionPropagationFilter filter = new 
AlibabaDubboTransactionPropagationFilter();
+        AlibabaDubboTransactionProviderFilter providerFilter = new 
AlibabaDubboTransactionProviderFilter();
 
         // SAGA
         RpcContext.getContext().setAttachment(RootContext.KEY_XID, 
DEFAULT_XID);
         RpcContext.getContext().setAttachment(RootContext.KEY_BRANCH_TYPE, 
BranchType.SAGA.name());
-        filter.invoke(new MockInvoker(() -> {
+        providerFilter.invoke(new MockInvoker(() -> {
             assertThat(RootContext.getXID()).isEqualTo(DEFAULT_XID);
             assertThat(RootContext.getBranchType()).isEqualTo(BranchType.AT);
         }), null);
@@ -46,7 +46,7 @@ public class AlibabaDubboTransactionPropagationFilterTest {
         // TCC
         RpcContext.getContext().setAttachment(RootContext.KEY_XID, 
DEFAULT_XID);
         RpcContext.getContext().setAttachment(RootContext.KEY_BRANCH_TYPE, 
BranchType.TCC.name());
-        filter.invoke(new MockInvoker(() -> {
+        providerFilter.invoke(new MockInvoker(() -> {
             assertThat(RootContext.getXID()).isEqualTo(DEFAULT_XID);
             assertThat(RootContext.getBranchType()).isEqualTo(BranchType.TCC);
         }), null);
@@ -54,11 +54,12 @@ public class AlibabaDubboTransactionPropagationFilterTest {
         assertThat(RootContext.unbindBranchType()).isNull();
 
         // TCC
+        AlibabaDubboTransactionConsumerFilter consumerFilter = new 
AlibabaDubboTransactionConsumerFilter();
         RootContext.bind(DEFAULT_XID);
         RootContext.bindBranchType(BranchType.SAGA);
         RpcContext.getContext().setAttachment(RootContext.KEY_XID, 
DEFAULT_XID);
         RpcContext.getContext().setAttachment(RootContext.KEY_BRANCH_TYPE, 
BranchType.TCC.name());
-        filter.invoke(new MockInvoker(() -> {
+        consumerFilter.invoke(new MockInvoker(() -> {
             assertThat(RootContext.getXID()).isEqualTo(DEFAULT_XID);
             assertThat(RootContext.getBranchType()).isEqualTo(BranchType.SAGA);
         }), null);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to