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

lizhimins pushed a commit to branch rocketmq-studio
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git


The following commit(s) were added to refs/heads/rocketmq-studio by this push:
     new 6fd143067 fix(group): normalize reset topic before apply (#2879)
6fd143067 is described below

commit 6fd143067376f2d65d1e3a40a3028043e4871c21
Author: btlqql <[email protected]>
AuthorDate: Wed Sep 2 17:14:12 2026 +0800

    fix(group): normalize reset topic before apply (#2879)
---
 .../rocketmq/studio/instance/topic/MetadataService.java    |  5 +++--
 .../studio/instance/topic/MetadataServiceTest.java         | 14 +++++++++++++-
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git 
a/server/src/main/java/org/apache/rocketmq/studio/instance/topic/MetadataService.java
 
b/server/src/main/java/org/apache/rocketmq/studio/instance/topic/MetadataService.java
index 3dee45338..fd7176880 100644
--- 
a/server/src/main/java/org/apache/rocketmq/studio/instance/topic/MetadataService.java
+++ 
b/server/src/main/java/org/apache/rocketmq/studio/instance/topic/MetadataService.java
@@ -329,11 +329,12 @@ public class MetadataService {
     public void resetOffset(String instanceId, String name, long timestamp, 
String topic) {
         instanceId = normalizeInstanceId(instanceId);
         String groupName = requireName(name, "consumer group name");
+        String topicName = requireName(topic, "topic name");
         InstanceProvider provider = resolve(instanceId);
         String normalizedInstanceId = instanceId;
         executeWithAudit(provider, Operation.RESET_OFFSET, ResourceType.GROUP, 
groupName, instanceId,
-                "topic=" + optionalDetail(topic) + ", timestamp=" + timestamp,
-                () -> provider.resetOffset(normalizedInstanceId, groupName, 
timestamp, topic));
+                "topic=" + topicName + ", timestamp=" + timestamp,
+                () -> provider.resetOffset(normalizedInstanceId, groupName, 
timestamp, topicName));
     }
 
 
diff --git 
a/server/src/test/java/org/apache/rocketmq/studio/instance/topic/MetadataServiceTest.java
 
b/server/src/test/java/org/apache/rocketmq/studio/instance/topic/MetadataServiceTest.java
index ab6205bce..b2eb75885 100644
--- 
a/server/src/test/java/org/apache/rocketmq/studio/instance/topic/MetadataServiceTest.java
+++ 
b/server/src/test/java/org/apache/rocketmq/studio/instance/topic/MetadataServiceTest.java
@@ -520,7 +520,7 @@ class MetadataServiceTest {
 
         metadataService.createConsumerGroup(group);
         metadataService.deleteConsumerGroup("cloud-instance", " cg-orders ");
-        metadataService.resetOffset("cloud-instance", " cg-orders ", 
1784246400000L, "orders");
+        metadataService.resetOffset("cloud-instance", " cg-orders ", 
1784246400000L, " orders ");
 
         verify(operationAuditService).record("CREATE_GROUP", "GROUP", 
"cg-orders",
                 "cloud-instance", "consumeType=-, subscriptionMode=-, 
retryMaxTimes=16", "SUCCESS", null);
@@ -528,6 +528,18 @@ class MetadataServiceTest {
                 "cloud-instance", null, "SUCCESS", null);
         verify(operationAuditService).record("RESET_OFFSET", "GROUP", 
"cg-orders",
                 "cloud-instance", "topic=orders, timestamp=1784246400000", 
"SUCCESS", null);
+        verify(cloudProvider).resetOffset("cloud-instance", "cg-orders", 
1784246400000L, "orders");
+    }
+
+    @Test
+    void resetOffsetShouldRejectBlankTopicBeforeProviderResolution() {
+        assertThatThrownBy(() -> metadataService.resetOffset("instance-a", 
"cg-orders",
+                1784246400000L, " "))
+                .isInstanceOf(BusinessException.class)
+                .hasMessage("topic name is required")
+                .satisfies(error -> assertThat(((BusinessException) 
error).getCode()).isEqualTo(400));
+
+        verifyNoInteractions(apacheProvider);
     }
 
     @Test

Reply via email to