Skip to content

Commit f9b544d

Browse files
authored
[ISSUE #1281]⚡️Optimize name server DefaultRequestProcessor#delete_topic_in_name_srv (#1282)
1 parent 4ed0d3c commit f9b544d

File tree

2 files changed

+12
-13
lines changed

2 files changed

+12
-13
lines changed

rocketmq-namesrv/src/processor/default_request_processor.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -349,10 +349,8 @@ impl DefaultRequestProcessor {
349349
let request_header = request
350350
.decode_command_custom_header::<DeleteTopicFromNamesrvRequestHeader>()
351351
.expect("decode DeleteTopicFromNamesrvRequestHeader failed");
352-
self.route_info_manager.delete_topic(
353-
request_header.topic.as_str(),
354-
request_header.cluster_name.clone(),
355-
);
352+
self.route_info_manager
353+
.delete_topic(request_header.topic, request_header.cluster_name);
356354
RemotingCommand::create_response_command()
357355
}
358356

rocketmq-namesrv/src/route/route_info_manager.rs

+10-9
Original file line numberDiff line numberDiff line change
@@ -736,29 +736,30 @@ impl RouteInfoManager {
736736

737737
pub(crate) fn delete_topic(
738738
&mut self,
739-
topic: impl Into<String>,
740-
cluster_name: Option<impl Into<String>>,
739+
topic: CheetahString,
740+
cluster_name: Option<CheetahString>,
741741
) {
742-
let topic_inner = topic.into();
743-
if cluster_name.is_some() {
744-
let cluster_name_inner = cluster_name.map(|s| s.into()).unwrap();
745-
let broker_names = self.cluster_addr_table.get(cluster_name_inner.as_str());
742+
let lock = self.lock.write();
743+
if cluster_name.as_ref().is_some_and(|inner| !inner.is_empty()) {
744+
let cluster_name_inner = cluster_name.unwrap();
745+
let broker_names = self.cluster_addr_table.get(&cluster_name_inner);
746746
if broker_names.is_none() || broker_names.unwrap().is_empty() {
747747
return;
748748
}
749-
if let Some(queue_data_map) = self.topic_queue_table.get_mut(topic_inner.as_str()) {
749+
if let Some(queue_data_map) = self.topic_queue_table.mut_from_ref().get_mut(&topic) {
750750
for broker_name in broker_names.unwrap() {
751751
if let Some(remove_qd) = queue_data_map.remove(broker_name) {
752752
info!(
753753
"deleteTopic, remove one broker's topic {} {} {:?}",
754-
broker_name, &topic_inner, remove_qd
754+
broker_name, &topic, remove_qd
755755
)
756756
}
757757
}
758758
}
759759
} else {
760-
self.topic_queue_table.remove(topic_inner.as_str());
760+
self.topic_queue_table.mut_from_ref().remove(&topic);
761761
}
762+
drop(lock)
762763
}
763764

764765
pub(crate) fn register_topic(&mut self, topic: CheetahString, queue_data_vec: Vec<QueueData>) {

0 commit comments

Comments
 (0)