diff --git a/namesrv/src/main/java/org/apache/rocketmq/namesrv/routeinfo/RouteInfoManager.java b/namesrv/src/main/java/org/apache/rocketmq/namesrv/routeinfo/RouteInfoManager.java index ce311d392aa..89571db0513 100644 --- a/namesrv/src/main/java/org/apache/rocketmq/namesrv/routeinfo/RouteInfoManager.java +++ b/namesrv/src/main/java/org/apache/rocketmq/namesrv/routeinfo/RouteInfoManager.java @@ -124,28 +124,18 @@ public void registerTopic(final String topic, List queueDatas) { try { this.lock.writeLock().lockInterruptibly(); - if (this.topicQueueTable.containsKey(topic)) { - Map queueDataMap = this.topicQueueTable.get(topic); - for (QueueData queueData : queueDatas) { - if (!this.brokerAddrTable.containsKey(queueData.getBrokerName())) { - log.warn("Register topic contains illegal broker, {}, {}", topic, queueData); - return; - } - queueDataMap.put(queueData.getBrokerName(), queueData); - } - log.info("Topic route already exist.{}, {}", topic, this.topicQueueTable.get(topic)); - } else { - // check and construct queue data map - Map queueDataMap = new HashMap<>(); - for (QueueData queueData : queueDatas) { - if (!this.brokerAddrTable.containsKey(queueData.getBrokerName())) { - log.warn("Register topic contains illegal broker, {}, {}", topic, queueData); - return; - } - queueDataMap.put(queueData.getBrokerName(), queueData); + Map queueDataMap = this.topicQueueTable.computeIfAbsent(topic, k -> new HashMap<>()); + for (QueueData queueData : queueDatas) { + if (!this.brokerAddrTable.containsKey(queueData.getBrokerName())) { + log.warn("Register topic contains illegal broker, {}, {}", topic, queueData); + return; } - this.topicQueueTable.put(topic, queueDataMap); + queueDataMap.put(queueData.getBrokerName(), queueData); + } + if (queueDataMap.size() > queueDatas.size()) { + log.info("Topic route already exist.{}, {}", topic, queueDataMap); + } else { log.info("Register topic route:{}, {}", topic, queueDatas); } } catch (Exception e) {