You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@rocketmq.apache.org by James <ya...@gmail.com> on 2018/06/12 06:23:40 UTC
MQAdminExt.deleteTopicInBroker delete topic not really
version:
rocketmq version 3.2.6
we distribute topic A on broker-a and broker-b,
then call MQAdminExt.deleteTopicInBroker delete topic A on broker-a
But find the namesrv topicRoute not update,
restart namersrv, topicRoute update
do we have any other method? but restart namesrv
i view the namesrv code,advise add removeDeletedTopicQueueData code
RouteInfoMansger.registerBroker()
if (tcTable != null) {
for (String topic : tcTable.keySet()) {
TopicConfig topicConfig = tcTable.get(topic);
this.createAndUpdateQueueData(brokerName, topicConfig);
}
}
//add code
removeDeletedTopicQueueData(brokerName, tcTable);
// add code
private void removeDeletedTopicQueueData(String brokerName,
ConcurrentHashMap<String, TopicConfig> tcTable) {
Iterator<Entry<String, List<QueueData>>> itMap =
this.topicQueueTable.entrySet().iterator();
while (itMap.hasNext()) {
Entry<String, List<QueueData>> entry = itMap.next();
String topic = entry.getKey();
List<QueueData> queueDataList = entry.getValue();
Iterator<QueueData> it = queueDataList.iterator();
while (it.hasNext()) {
QueueData qd = it.next();
if (qd.getBrokerName().equals(brokerName)) {
if (!tcTable.contains(topic)) {
log.info("removeDeletedTopic, remove one broker's
topic {} {}", topic, qd);
it.remove();
}
}
}
}
}