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

lizhimins 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 44e49a99d0 [ISSUE #11466] Extract group max length into a field in 
TopicValidator (#11467)
44e49a99d0 is described below

commit 44e49a99d05867869b81c8d9a55baa7b9f17637e
Author: Quan <[email protected]>
AuthorDate: Tue Oct 27 11:17:30 2026 +0800

    [ISSUE #11466] Extract group max length into a field in TopicValidator 
(#11467)
---
 .../rocketmq/common/topic/TopicValidator.java       | 11 +++++++++--
 .../rocketmq/common/topic/TopicValidatorTest.java   | 21 +++++++++++++++++++++
 2 files changed, 30 insertions(+), 2 deletions(-)

diff --git 
a/common/src/main/java/org/apache/rocketmq/common/topic/TopicValidator.java 
b/common/src/main/java/org/apache/rocketmq/common/topic/TopicValidator.java
index ade6289c67..f1b59848c9 100644
--- a/common/src/main/java/org/apache/rocketmq/common/topic/TopicValidator.java
+++ b/common/src/main/java/org/apache/rocketmq/common/topic/TopicValidator.java
@@ -48,6 +48,8 @@ public class TopicValidator {
     private static final int GROUP_MAX_LENGTH = 120;
     private static final int RETRY_OR_DLQ_TOPIC_MAX_LENGTH = 255;
 
+    private static volatile int groupMaxLength = GROUP_MAX_LENGTH;
+
     private static final Set<String> SYSTEM_TOPIC_SET = new HashSet<>();
 
     /**
@@ -139,6 +141,11 @@ public class TopicValidator {
         return new ValidateResult(true, "");
     }
 
+    public static void setGroupMaxLength(int maxLength) {
+        groupMaxLength = maxLength <= 0 ? GROUP_MAX_LENGTH
+            : Math.min(maxLength, RETRY_OR_DLQ_TOPIC_MAX_LENGTH);
+    }
+
     public static ValidateResult validateGroup(String group) {
 
         if (UtilAll.isBlank(group)) {
@@ -150,8 +157,8 @@ public class TopicValidator {
             return new ValidateResult(false, falseRemark);
         }
 
-        if (group.length() > GROUP_MAX_LENGTH) {
-            String falseRemark = "The specified group: " + group + ", is 
longer than group max length: " + GROUP_MAX_LENGTH;
+        if (group.length() > groupMaxLength) {
+            String falseRemark = "The specified group: " + group + ", is 
longer than group max length: " + groupMaxLength;
             return new ValidateResult(false, falseRemark);
         }
 
diff --git 
a/common/src/test/java/org/apache/rocketmq/common/topic/TopicValidatorTest.java 
b/common/src/test/java/org/apache/rocketmq/common/topic/TopicValidatorTest.java
index 0541c7f6d2..879b9a5f71 100644
--- 
a/common/src/test/java/org/apache/rocketmq/common/topic/TopicValidatorTest.java
+++ 
b/common/src/test/java/org/apache/rocketmq/common/topic/TopicValidatorTest.java
@@ -87,6 +87,27 @@ public class TopicValidatorTest {
         assertThat(res.isValid()).isFalse();
     }
 
+    @Test
+    public void testGroupValidator_WithCustomMaxLength() {
+        try {
+            TopicValidator.setGroupMaxLength(255);
+            
assertThat(TopicValidator.validateGroup(generateString2(255)).isValid()).isTrue();
+            
assertThat(TopicValidator.validateGroup(generateString2(256)).isValid()).isFalse();
+
+            // values above 255 are capped at 255
+            TopicValidator.setGroupMaxLength(300);
+            
assertThat(TopicValidator.validateGroup(generateString2(255)).isValid()).isTrue();
+            
assertThat(TopicValidator.validateGroup(generateString2(256)).isValid()).isFalse();
+
+            // non-positive values fall back to the default of 120
+            TopicValidator.setGroupMaxLength(0);
+            
assertThat(TopicValidator.validateGroup(generateString2(120)).isValid()).isTrue();
+            
assertThat(TopicValidator.validateGroup(generateString2(121)).isValid()).isFalse();
+        } finally {
+            TopicValidator.setGroupMaxLength(120);
+        }
+    }
+
     @Test
     public void testAddSystemTopic() {
         String topic = "SYSTEM_TOPIC_TEST";

Reply via email to