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 740cd73cd fix(consumer): order group progress by topic and queue
(#7251)
740cd73cd is described below
commit 740cd73cd4be166529b13a4ebe80006abed7d807
Author: Loyal-Young <[email protected]>
AuthorDate: Mon Oct 26 21:23:31 2026 +0800
fix(consumer): order group progress by topic and queue (#7251)
* fix(consumer): order group progress by topic and queue
---
.../provider/apache/RocketMQMetadataProvider.java | 9 +++++----
.../provider/apache/RocketMQMetadataProviderTest.java | 19 +++++++++++++++++++
2 files changed, 24 insertions(+), 4 deletions(-)
diff --git
a/server/src/main/java/org/apache/rocketmq/studio/provider/apache/RocketMQMetadataProvider.java
b/server/src/main/java/org/apache/rocketmq/studio/provider/apache/RocketMQMetadataProvider.java
index 415aca29b..2e352a373 100644
---
a/server/src/main/java/org/apache/rocketmq/studio/provider/apache/RocketMQMetadataProvider.java
+++
b/server/src/main/java/org/apache/rocketmq/studio/provider/apache/RocketMQMetadataProvider.java
@@ -755,10 +755,11 @@ public class RocketMQMetadataProvider implements
MetadataProvider {
.build());
}
- progress.sort((a, b) -> {
- int cmp = a.getBroker().compareToIgnoreCase(b.getBroker());
- return cmp != 0 ? cmp : Integer.compare(a.getQueueId(),
b.getQueueId());
- });
+ progress.sort(Comparator.comparing(QueueProgressVO::getBroker,
String.CASE_INSENSITIVE_ORDER)
+ .thenComparing(QueueProgressVO::getBroker)
+ .thenComparing(QueueProgressVO::getTopic,
String.CASE_INSENSITIVE_ORDER)
+ .thenComparing(QueueProgressVO::getTopic)
+ .thenComparingInt(QueueProgressVO::getQueueId));
return progress;
} catch (Exception e) {
if (isGroupNotOnline(e)) {
diff --git
a/server/src/test/java/org/apache/rocketmq/studio/provider/apache/RocketMQMetadataProviderTest.java
b/server/src/test/java/org/apache/rocketmq/studio/provider/apache/RocketMQMetadataProviderTest.java
index 6de3d9da9..a9796f3e5 100644
---
a/server/src/test/java/org/apache/rocketmq/studio/provider/apache/RocketMQMetadataProviderTest.java
+++
b/server/src/test/java/org/apache/rocketmq/studio/provider/apache/RocketMQMetadataProviderTest.java
@@ -651,6 +651,25 @@ class RocketMQMetadataProviderTest {
.satisfies(error -> assertThat(((BusinessException)
error).getCode()).isEqualTo(502));
}
+ @Test
+ void getGroupProgressOrdersQueuesWithinEachBrokerByTopicAndQueueId()
throws Exception {
+ DefaultMQAdminExt admin = mock(DefaultMQAdminExt.class);
+ ConsumeStats stats = new ConsumeStats();
+ Map<MessageQueue, OffsetWrapper> offsets = new LinkedHashMap<>();
+ offsets.put(new MessageQueue("TopicB", "broker-a", 0), offset(20, 10));
+ offsets.put(new MessageQueue("TopicA", "broker-a", 1), offset(20, 10));
+ offsets.put(new MessageQueue("TopicA", "broker-a", 0), offset(20, 10));
+ stats.setOffsetTable(offsets);
+ when(admin.examineConsumeStats("group-a")).thenReturn(stats);
+
+ List<QueueProgressVO> progress =
newLiveProvider(admin).getGroupProgress(null, "group-a");
+
+ assertThat(progress).extracting(QueueProgressVO::getTopic)
+ .containsExactly("TopicA", "TopicA", "TopicB");
+ assertThat(progress).extracting(QueueProgressVO::getQueueId)
+ .containsExactly(0, 1, 0);
+ }
+
@Test
void getGroupProgressShouldReturnEmptyWhenConsumerNotOnlineTest() throws
Exception {
DefaultMQAdminExt admin =
org.mockito.Mockito.mock(DefaultMQAdminExt.class);