@@ -762,15 +762,21 @@ impl RouteInfoManager {
762
762
drop ( lock)
763
763
}
764
764
765
- pub ( crate ) fn register_topic ( & mut self , topic : CheetahString , queue_data_vec : Vec < QueueData > ) {
765
+ pub ( crate ) fn register_topic ( & self , topic : CheetahString , queue_data_vec : Vec < QueueData > ) {
766
766
if queue_data_vec. is_empty ( ) {
767
767
return ;
768
768
}
769
-
769
+ let lock = self . lock . write ( ) ;
770
770
if !self . topic_queue_table . contains_key ( & topic) {
771
- self . topic_queue_table . insert ( topic. clone ( ) , HashMap :: new ( ) ) ;
771
+ self . topic_queue_table
772
+ . mut_from_ref ( )
773
+ . insert ( topic. clone ( ) , HashMap :: new ( ) ) ;
772
774
}
773
- let queue_data_map = self . topic_queue_table . get_mut ( & topic) . unwrap ( ) ;
775
+ let queue_data_map = self
776
+ . topic_queue_table
777
+ . mut_from_ref ( )
778
+ . get_mut ( & topic)
779
+ . unwrap ( ) ;
774
780
let vec_length = queue_data_vec. len ( ) ;
775
781
for queue_data in queue_data_vec {
776
782
if !self
@@ -785,6 +791,7 @@ impl RouteInfoManager {
785
791
}
786
792
queue_data_map. insert ( queue_data. broker_name ( ) . clone ( ) , queue_data) ;
787
793
}
794
+ drop ( lock) ;
788
795
789
796
if queue_data_map. len ( ) > vec_length {
790
797
info ! ( "Topic route already exist.{}, {:?}" , topic, queue_data_map)
@@ -793,8 +800,9 @@ impl RouteInfoManager {
793
800
}
794
801
}
795
802
796
- pub ( crate ) fn get_topics_by_cluster ( & self , cluster : & str ) -> TopicList {
803
+ pub ( crate ) fn get_topics_by_cluster ( & self , cluster : & CheetahString ) -> TopicList {
797
804
let mut topic_list = Vec :: new ( ) ;
805
+ let lock = self . lock . read ( ) ;
798
806
if let Some ( broker_name_set) = self . cluster_addr_table . get ( cluster) {
799
807
for broker_name in broker_name_set {
800
808
for ( topic, queue_data_map) in self . topic_queue_table . iter ( ) {
@@ -804,6 +812,7 @@ impl RouteInfoManager {
804
812
}
805
813
}
806
814
}
815
+ drop ( lock) ;
807
816
TopicList {
808
817
topic_list,
809
818
broker_addr : None ,
@@ -821,10 +830,6 @@ impl RouteInfoManager {
821
830
}
822
831
if !self . broker_addr_table . is_empty ( ) {
823
832
for broker_addr in self . broker_addr_table . values ( ) {
824
- /*for ip in broker_addr.broker_addrs().values() {
825
- broker_addr_out = Some(ip.clone());
826
- break;
827
- }*/
828
833
let broker_addrs = broker_addr. broker_addrs ( ) ;
829
834
if !broker_addrs. is_empty ( ) {
830
835
broker_addr_out = Some ( broker_addrs. values ( ) . next ( ) . unwrap ( ) . clone ( ) ) ;
0 commit comments