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