From 2c5c2bda1f770e30d332b510987675073524c415 Mon Sep 17 00:00:00 2001 From: itxaiohanglover <1531137510@qq.com> Date: Sun, 5 Jul 2026 17:21:48 +0800 Subject: [PATCH] [ISSUE #411] Fix NPE when getAllSubscriptionGroup returns null When mqAdminExt.getAllSubscriptionGroup() returns null (e.g. broker not reachable or ACL denied), the code calls subscriptionGroupWrapper.getSubscriptionGroupTable() which throws NPE. Add null check after getAllSubscriptionGroup call, skip to next broker if null. Also fix post-loop check to handle null (empty broker table). --- .../dashboard/service/impl/ConsumerServiceImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/rocketmq/dashboard/service/impl/ConsumerServiceImpl.java b/src/main/java/org/apache/rocketmq/dashboard/service/impl/ConsumerServiceImpl.java index 58fb5f5d..6d5eef80 100644 --- a/src/main/java/org/apache/rocketmq/dashboard/service/impl/ConsumerServiceImpl.java +++ b/src/main/java/org/apache/rocketmq/dashboard/service/impl/ConsumerServiceImpl.java @@ -180,6 +180,10 @@ public void makeGroupListCache(String address) { ClusterInfo clusterInfo = clusterInfoService.get(); for (BrokerData brokerData : clusterInfo.getBrokerAddrTable().values()) { subscriptionGroupWrapper = mqAdminExt.getAllSubscriptionGroup(brokerData.selectBrokerAddr(), 30000L); + if (subscriptionGroupWrapper == null) { + logger.warn("getAllSubscriptionGroup returned null for broker: {}", brokerData.selectBrokerAddr()); + continue; + } for (String groupName : subscriptionGroupWrapper.getSubscriptionGroupTable().keySet()) { if (!consumerGroupMap.containsKey(groupName)) { consumerGroupMap.putIfAbsent(groupName, new ArrayList<>()); @@ -194,7 +198,7 @@ public void makeGroupListCache(String address) { throw new RuntimeException(err); } - if (subscriptionGroupWrapper != null && subscriptionGroupWrapper.getSubscriptionGroupTable().isEmpty()) { + if (subscriptionGroupWrapper == null || subscriptionGroupWrapper.getSubscriptionGroupTable().isEmpty()) { logger.warn("No subscription group information available"); isCacheBeingBuilt = false; return;