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