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");
+ }
}