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);

Reply via email to