You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by yu...@apache.org on 2021/12/08 07:07:38 UTC

[rocketmq] branch develop updated: [Issue #3394] fix duplicate keys in trace message (#3395)

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

yuzhou pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git


The following commit(s) were added to refs/heads/develop by this push:
     new a47f1ef  [Issue #3394] fix duplicate keys in trace message (#3395)
a47f1ef is described below

commit a47f1ef60e24b82a44621b29b82d5e052a8db9e5
Author: yuz10 <84...@qq.com>
AuthorDate: Wed Dec 8 15:07:31 2021 +0800

    [Issue #3394] fix duplicate keys in trace message (#3395)
---
 .../rocketmq/client/trace/TraceDataEncoder.java    |  5 +++-
 .../client/trace/TraceDataEncoderTest.java         | 33 +++++++++++++++++++++-
 2 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/client/src/main/java/org/apache/rocketmq/client/trace/TraceDataEncoder.java b/client/src/main/java/org/apache/rocketmq/client/trace/TraceDataEncoder.java
index b4a49a0..f0c685e 100644
--- a/client/src/main/java/org/apache/rocketmq/client/trace/TraceDataEncoder.java
+++ b/client/src/main/java/org/apache/rocketmq/client/trace/TraceDataEncoder.java
@@ -17,9 +17,11 @@
 package org.apache.rocketmq.client.trace;
 
 import org.apache.rocketmq.client.producer.LocalTransactionState;
+import org.apache.rocketmq.common.message.MessageConst;
 import org.apache.rocketmq.common.message.MessageType;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -218,7 +220,8 @@ public class TraceDataEncoder {
 
             transferBean.getTransKey().add(bean.getMsgId());
             if (bean.getKeys() != null && bean.getKeys().length() > 0) {
-                transferBean.getTransKey().add(bean.getKeys());
+                String[] keys = bean.getKeys().split(MessageConst.KEY_SEPARATOR);
+                transferBean.getTransKey().addAll(Arrays.asList(keys));
             }
         }
         return transferBean;
diff --git a/client/src/test/java/org/apache/rocketmq/client/trace/TraceDataEncoderTest.java b/client/src/test/java/org/apache/rocketmq/client/trace/TraceDataEncoderTest.java
index 03381d0..fed8c4e 100644
--- a/client/src/test/java/org/apache/rocketmq/client/trace/TraceDataEncoderTest.java
+++ b/client/src/test/java/org/apache/rocketmq/client/trace/TraceDataEncoderTest.java
@@ -25,6 +25,9 @@ import org.junit.Test;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
+
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class TraceDataEncoderTest {
 
@@ -129,7 +132,7 @@ public class TraceDataEncoderTest {
         Assert.assertEquals(before.getTransactionState(), after.getTransactionState());
         Assert.assertEquals(before.isFromTransactionCheck(), after.isFromTransactionCheck());
     }
-    
+
     @Test
     public void testPubTraceDataFormatTest() {
         TraceContext pubContext = new TraceContext();
@@ -234,4 +237,32 @@ public class TraceDataEncoderTest {
         Assert.assertEquals(13, items.length);
 
     }
+
+    @Test
+    public void testTraceKeys() {
+        TraceContext endTrxContext = new TraceContext();
+        endTrxContext.setTraceType(TraceType.EndTransaction);
+        endTrxContext.setGroupName("PID-test");
+        endTrxContext.setRegionId("DefaultRegion");
+        endTrxContext.setTimeStamp(time);
+        TraceBean endTrxTraceBean = new TraceBean();
+        endTrxTraceBean.setTopic("topic-test");
+        endTrxTraceBean.setKeys("Keys Keys2");
+        endTrxTraceBean.setTags("Tags");
+        endTrxTraceBean.setMsgId("AC1415116D1418B4AAC217FE1B4E0000");
+        endTrxTraceBean.setStoreHost("127.0.0.1:10911");
+        endTrxTraceBean.setMsgType(MessageType.Trans_msg_Commit);
+        endTrxTraceBean.setTransactionId("transactionId");
+        endTrxTraceBean.setTransactionState(LocalTransactionState.COMMIT_MESSAGE);
+        endTrxTraceBean.setFromTransactionCheck(false);
+        List<TraceBean> traceBeans = new ArrayList<TraceBean>();
+        traceBeans.add(endTrxTraceBean);
+        endTrxContext.setTraceBeans(traceBeans);
+
+        TraceTransferBean traceTransferBean = TraceDataEncoder.encoderFromContextBean(endTrxContext);
+
+        Set<String> keys = traceTransferBean.getTransKey();
+        assertThat(keys).contains("Keys");
+        assertThat(keys).contains("Keys2");
+    }
 }