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 d2d9eff6 fix(rocketmq): tolerate missing broker tables in dashboard
overview (#1072)
d2d9eff6 is described below
commit d2d9eff6de93719ab674f44797283e388ef988d6
Author: yyqdbngt <[email protected]>
AuthorDate: Thu Aug 6 16:17:59 2026 +0800
fix(rocketmq): tolerate missing broker tables in dashboard overview (#1072)
Co-authored-by: yyqdbngt <[email protected]>
---
.../studio/rocketmq/RocketMQDashboardProvider.java | 4 ++++
.../rocketmq/RocketMQDashboardProviderTest.java | 24 ++++++++++++++++++++++
2 files changed, 28 insertions(+)
diff --git
a/server/src/main/java/org/apache/rocketmq/studio/rocketmq/RocketMQDashboardProvider.java
b/server/src/main/java/org/apache/rocketmq/studio/rocketmq/RocketMQDashboardProvider.java
index 61bd5dec..0b7214de 100644
---
a/server/src/main/java/org/apache/rocketmq/studio/rocketmq/RocketMQDashboardProvider.java
+++
b/server/src/main/java/org/apache/rocketmq/studio/rocketmq/RocketMQDashboardProvider.java
@@ -96,6 +96,7 @@ public class RocketMQDashboardProvider implements
DashboardProvider {
// Collect all unique broker addresses (master only, brokerId=0)
Set<String> masterAddrs = new HashSet<>();
+
for (BrokerData brokerData : brokerAddrTable.values()) {
if (brokerData == null || brokerData.getBrokerAddrs() == null)
{
continue;
@@ -105,6 +106,9 @@ public class RocketMQDashboardProvider implements
DashboardProvider {
masterAddrs.add(masterAddr);
}
}
+ if (masterAddrs.isEmpty()) {
+ log.warn("No master broker addresses discovered for dashboard
overview");
+ }
// Count topics
try {
diff --git
a/server/src/test/java/org/apache/rocketmq/studio/rocketmq/RocketMQDashboardProviderTest.java
b/server/src/test/java/org/apache/rocketmq/studio/rocketmq/RocketMQDashboardProviderTest.java
index d7707759..7a468b84 100644
---
a/server/src/test/java/org/apache/rocketmq/studio/rocketmq/RocketMQDashboardProviderTest.java
+++
b/server/src/test/java/org/apache/rocketmq/studio/rocketmq/RocketMQDashboardProviderTest.java
@@ -17,6 +17,8 @@
package org.apache.rocketmq.studio.rocketmq;
import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
@@ -89,6 +91,28 @@ class RocketMQDashboardProviderTest {
assertThat(dashboard.getClusters().get(0).getBrokers()).isZero();
}
+ @Test
+ void dashboardShouldNotFailWhenBrokerAddrTableIsNull() throws Exception {
+ DefaultMQAdminExt adminExt = mock(DefaultMQAdminExt.class);
+ ClusterInfo info = new ClusterInfo();
+ HashMap<String, Set<String>> clusterAddrTable = new HashMap<>();
+ clusterAddrTable.put("cluster-1", new HashSet<>(List.of("broker-a")));
+ info.setClusterAddrTable(clusterAddrTable);
+ // brokerAddrTable intentionally left null
+ when(adminExt.examineBrokerClusterInfo()).thenReturn(info);
+ when(adminExt.fetchAllTopicList()).thenReturn(topicList());
+
+ RocketMQDashboardProvider provider = new
RocketMQDashboardProvider(adminExt);
+
+ DashboardDataVO dashboard = provider.getDashboardData();
+
+ // The cluster is still surfaced (name, status) but no broker
statistics exist.
+ assertThat(dashboard.getClusters()).hasSize(1);
+ assertThat(dashboard.getClusters().get(0).getBrokers()).isZero();
+ assertThat(dashboard.getStats().getTotalClusters()).isEqualTo(1);
+ assertThat(dashboard.getStats().getTotalBrokers()).isZero();
+ }
+
private ClusterInfo clusterInfo() {
ClusterInfo info = new ClusterInfo();
HashMap<Long, String> addrs = new HashMap<>();