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 4143b6dcb fix(topic): order route rows by broker name (#6386)
4143b6dcb is described below

commit 4143b6dcb4a92ccc34078e2010532bbb5440e2b3
Author: 0 <[email protected]>
AuthorDate: Thu Oct 15 18:09:14 2026 +0800

    fix(topic): order route rows by broker name (#6386)
    
    * fix(topic): order route rows by broker name
    
    * test(topic): end the route-order test with Test and align the rationale
---
 .../provider/apache/RocketMQMetadataProvider.java   |  8 +++++++-
 .../apache/RocketMQMetadataProviderTest.java        | 21 +++++++++++++++++++++
 2 files changed, 28 insertions(+), 1 deletion(-)

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 6c73400b7..2171f0550 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
@@ -65,6 +65,7 @@ import lombok.extern.slf4j.Slf4j;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
@@ -504,7 +505,12 @@ public class RocketMQMetadataProvider implements 
MetadataProvider {
 
             List<BrokerRouteVO> routes = new ArrayList<>();
             if (routeData.getQueueDatas() != null) {
-                for (QueueData qd : routeData.getQueueDatas()) {
+                // The route rows come straight off the broker's table walk; 
order them by
+                // broker name so the route table agrees with the queue stats 
view on the same screen.
+                List<QueueData> orderedQueueDatas = new 
ArrayList<>(routeData.getQueueDatas());
+                
orderedQueueDatas.sort(Comparator.comparing(QueueData::getBrokerName,
+                        Comparator.nullsLast(Comparator.naturalOrder())));
+                for (QueueData qd : orderedQueueDatas) {
                     BrokerData bd = brokerDataMap.get(qd.getBrokerName());
                     Map<Long, String> brokerAddrs = orderedBrokerAddrs(bd);
                     String masterAddr = brokerAddrs.get(MixAll.MASTER_ID);
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 c191e0932..441fe4a4c 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
@@ -314,6 +314,27 @@ class RocketMQMetadataProviderTest {
         });
     }
 
+    @Test
+    void getTopicRoutesShouldOrderRoutesByBrokerNameTest() throws Exception {
+        DefaultMQAdminExt admin = mock(DefaultMQAdminExt.class);
+        QueueData brokerZ = new QueueData();
+        brokerZ.setBrokerName("broker-z");
+        brokerZ.setPerm(6);
+        QueueData brokerA = new QueueData();
+        brokerA.setBrokerName("broker-a");
+        brokerA.setPerm(6);
+        TopicRouteData routeData = new TopicRouteData();
+        // The route listing must order by broker name the way the queue stats 
view on the
+        // same screen does.
+        routeData.setQueueDatas(List.of(brokerZ, brokerA));
+        when(admin.examineTopicRouteInfo("TopicA")).thenReturn(routeData);
+
+        List<BrokerRouteVO> routes = 
newLiveProvider(admin).getTopicRoutes(null, "TopicA");
+
+        assertThat(routes).extracting(BrokerRouteVO::getBrokerName)
+                .containsExactly("broker-a", "broker-z");
+    }
+
     @Test
     void getTopicRoutesShouldExposeBrokerTopologyDetails() throws Exception {
         DefaultMQAdminExt admin = mock(DefaultMQAdminExt.class);

Reply via email to