diff --git a/common/src/main/java/org/apache/rocketmq/common/KeyBuilder.java b/common/src/main/java/org/apache/rocketmq/common/KeyBuilder.java index 19fe9ec5286..f699e01b12d 100644 --- a/common/src/main/java/org/apache/rocketmq/common/KeyBuilder.java +++ b/common/src/main/java/org/apache/rocketmq/common/KeyBuilder.java @@ -42,14 +42,15 @@ public static String buildPopRetryTopicV1(String topic, String cid) { } public static String parseNormalTopic(String topic, String cid) { - if (topic.startsWith(MixAll.RETRY_GROUP_TOPIC_PREFIX)) { - if (topic.startsWith(MixAll.RETRY_GROUP_TOPIC_PREFIX + cid + POP_RETRY_SEPARATOR_V2)) { - return topic.substring((MixAll.RETRY_GROUP_TOPIC_PREFIX + cid + POP_RETRY_SEPARATOR_V2).length()); - } - return topic.substring((MixAll.RETRY_GROUP_TOPIC_PREFIX + cid + POP_RETRY_SEPARATOR_V1).length()); - } else { - return topic; + String retryPrefixV2 = MixAll.RETRY_GROUP_TOPIC_PREFIX + cid + POP_RETRY_SEPARATOR_V2; + if (topic.startsWith(retryPrefixV2)) { + return topic.substring(retryPrefixV2.length()); + } + String retryPrefixV1 = MixAll.RETRY_GROUP_TOPIC_PREFIX + cid + POP_RETRY_SEPARATOR_V1; + if (topic.startsWith(retryPrefixV1)) { + return topic.substring(retryPrefixV1.length()); } + return topic; } public static String parseNormalTopic(String retryTopic) { diff --git a/common/src/test/java/org/apache/rocketmq/common/KeyBuilderTest.java b/common/src/test/java/org/apache/rocketmq/common/KeyBuilderTest.java index 47191c907fe..6b594ada990 100644 --- a/common/src/test/java/org/apache/rocketmq/common/KeyBuilderTest.java +++ b/common/src/test/java/org/apache/rocketmq/common/KeyBuilderTest.java @@ -47,6 +47,20 @@ public void testParseNormalTopic() { assertThat(KeyBuilder.parseNormalTopic(popRetryTopic)).isEqualTo(topic); } + @Test + public void testParseNormalTopicDoesNotStripAnotherGroup() { + String retryTopic = KeyBuilder.buildPopRetryTopicV1(topic, "another-group"); + + assertThat(KeyBuilder.parseNormalTopic(retryTopic, group)).isEqualTo(retryTopic); + } + + @Test + public void testParseNormalTopicDoesNotFailForRegularRetryTopic() { + String retryTopic = MixAll.RETRY_GROUP_TOPIC_PREFIX + group; + + assertThat(KeyBuilder.parseNormalTopic(retryTopic, group)).isEqualTo(retryTopic); + } + @Test public void testParseGroup() { String popRetryTopic = KeyBuilder.buildPopRetryTopicV2(topic, group); @@ -60,4 +74,4 @@ public void testIsPopRetryTopicV2() { String popRetryTopicV1 = KeyBuilder.buildPopRetryTopicV1(topic, group); assertThat(KeyBuilder.isPopRetryTopicV2(popRetryTopicV1)).isEqualTo(false); } -} \ No newline at end of file +}