diff --git a/easytier/src/common/global_ctx.rs b/easytier/src/common/global_ctx.rs index 3294813a..360e113d 100644 --- a/easytier/src/common/global_ctx.rs +++ b/easytier/src/common/global_ctx.rs @@ -122,7 +122,7 @@ impl GlobalCtx { let net_ns = NetNS::new(config_fs.get_netns()); let hostname = config_fs.get_hostname(); - let (event_bus, _) = tokio::sync::broadcast::channel(8); + let (event_bus, _) = tokio::sync::broadcast::channel(16); let stun_info_collector = StunInfoCollector::new_with_default_servers(); diff --git a/easytier/src/peer_center/instance.rs b/easytier/src/peer_center/instance.rs index 057b3d75..2ce5ed46 100644 --- a/easytier/src/peer_center/instance.rs +++ b/easytier/src/peer_center/instance.rs @@ -442,7 +442,7 @@ impl PeerCenterPeerManagerTrait for PeerMapWithPeerRpcManager { // TODO: currently latency between public server cannot be calculated because one public-server pair // has no connection between them. (hard to get latency from peer manager because it's hard to transfrom the peer id) // but it's fine because we don't want to too much traffic between public servers. - let peers = self.peer_map.list_peers().await; + let peers = self.peer_map.list_peers(); let mut ret = PeerInfoForGlobalMap::default(); for peer in peers { if let Some(conns) = self.peer_map.list_peer_conns(peer).await { diff --git a/easytier/src/peers/foreign_network_client.rs b/easytier/src/peers/foreign_network_client.rs index ddf3113e..13da76d7 100644 --- a/easytier/src/peers/foreign_network_client.rs +++ b/easytier/src/peers/foreign_network_client.rs @@ -48,7 +48,7 @@ impl ForeignNetworkClient { } pub async fn list_public_peers(&self) -> Vec { - self.peer_map.list_peers().await + self.peer_map.list_peers() } pub fn get_next_hop(&self, peer_id: PeerId) -> Option { diff --git a/easytier/src/peers/foreign_network_manager.rs b/easytier/src/peers/foreign_network_manager.rs index 3ccf55a6..8adc78f8 100644 --- a/easytier/src/peers/foreign_network_manager.rs +++ b/easytier/src/peers/foreign_network_manager.rs @@ -466,11 +466,15 @@ impl ForeignNetworkManagerData { fn remove_network(&self, network_name: &String) { let _l = self.lock.lock().unwrap(); - self.peer_network_map.iter().for_each(|v| { - v.value().remove(network_name); - }); - self.peer_network_map.retain(|_, v| !v.is_empty()); - self.network_peer_maps.remove(network_name); + if let Some(old) = self.network_peer_maps.remove(network_name) { + let to_remove_peers = old.1.peer_map.list_peers(); + for p in to_remove_peers { + self.peer_network_map.remove_if(&p, |_, v| { + v.remove(network_name); + v.is_empty() + }); + } + } self.network_peer_last_update.remove(network_name); } @@ -695,7 +699,7 @@ impl ForeignNetworkManager { my_peer_id_for_this_network: item.my_peer_id, peers: Default::default(), }; - for peer in item.peer_map.list_peers().await { + for peer in item.peer_map.list_peers() { let peer_info = PeerInfo { peer_id: peer, conns: item.peer_map.list_peer_conns(peer).await.unwrap_or(vec![]), @@ -921,7 +925,6 @@ pub mod tests { .get_foreign_network_client() .get_peer_map() .list_peers() - .await ); assert_eq!( vec![pm_center @@ -932,7 +935,6 @@ pub mod tests { .get_foreign_network_client() .get_peer_map() .list_peers() - .await ); assert_eq!(2, pma_net1.list_routes().await.len()); diff --git a/easytier/src/peers/peer_map.rs b/easytier/src/peers/peer_map.rs index 5a33aaf5..ffe0bce6 100644 --- a/easytier/src/peers/peer_map.rs +++ b/easytier/src/peers/peer_map.rs @@ -266,7 +266,7 @@ impl PeerMap { self.peer_map.is_empty() } - pub async fn list_peers(&self) -> Vec { + pub fn list_peers(&self) -> Vec { let mut ret = Vec::new(); for item in self.peer_map.iter() { let peer_id = item.key(); @@ -277,7 +277,7 @@ impl PeerMap { pub async fn list_peers_with_conn(&self) -> Vec { let mut ret = Vec::new(); - let peers = self.list_peers().await; + let peers = self.list_peers(); for peer_id in peers.iter() { let Some(peer) = self.get_peer_by_id(*peer_id) else { continue; @@ -337,7 +337,7 @@ impl PeerMap { pub async fn clean_peer_without_conn(&self) { let mut to_remove = vec![]; - for peer_id in self.list_peers().await { + for peer_id in self.list_peers() { let conns = self.list_peer_conns(peer_id).await; if conns.is_none() || conns.as_ref().unwrap().is_empty() { to_remove.push(peer_id); diff --git a/easytier/src/peers/peer_ospf_route.rs b/easytier/src/peers/peer_ospf_route.rs index 9cfb44b2..e8d3b062 100644 --- a/easytier/src/peers/peer_ospf_route.rs +++ b/easytier/src/peers/peer_ospf_route.rs @@ -3289,7 +3289,6 @@ mod tests { routable_peer .get_peer_map() .list_peers() - .await .into_iter() .collect::>() ); diff --git a/easytier/src/peers/peer_rpc.rs b/easytier/src/peers/peer_rpc.rs index 92a45861..35f30c85 100644 --- a/easytier/src/peers/peer_rpc.rs +++ b/easytier/src/peers/peer_rpc.rs @@ -235,15 +235,15 @@ pub mod tests { .await .unwrap(); - assert_eq!(peer_mgr_a.get_peer_map().list_peers().await.len(), 1); + assert_eq!(peer_mgr_a.get_peer_map().list_peers().len(), 1); assert_eq!( - peer_mgr_a.get_peer_map().list_peers().await[0], + peer_mgr_a.get_peer_map().list_peers()[0], peer_mgr_b.my_peer_id() ); - assert_eq!(peer_mgr_c.get_peer_map().list_peers().await.len(), 1); + assert_eq!(peer_mgr_c.get_peer_map().list_peers().len(), 1); assert_eq!( - peer_mgr_c.get_peer_map().list_peers().await[0], + peer_mgr_c.get_peer_map().list_peers()[0], peer_mgr_b.my_peer_id() ); @@ -299,9 +299,9 @@ pub mod tests { .await .unwrap(); - assert_eq!(peer_mgr_a.get_peer_map().list_peers().await.len(), 1); + assert_eq!(peer_mgr_a.get_peer_map().list_peers().len(), 1); assert_eq!( - peer_mgr_a.get_peer_map().list_peers().await[0], + peer_mgr_a.get_peer_map().list_peers()[0], peer_mgr_b.my_peer_id() ); diff --git a/easytier/src/peers/rpc_service.rs b/easytier/src/peers/rpc_service.rs index 1a70a214..f5ffef67 100644 --- a/easytier/src/peers/rpc_service.rs +++ b/easytier/src/peers/rpc_service.rs @@ -33,13 +33,12 @@ impl PeerManagerRpcService { } pub async fn list_peers(peer_manager: &PeerManager) -> Vec { - let mut peers = peer_manager.get_peer_map().list_peers().await; + let mut peers = peer_manager.get_peer_map().list_peers(); peers.extend( peer_manager .get_foreign_network_client() .get_peer_map() .list_peers() - .await .iter(), ); let peer_map = peer_manager.get_peer_map(); diff --git a/easytier/src/peers/tests.rs b/easytier/src/peers/tests.rs index 23098eb0..b09b400f 100644 --- a/easytier/src/peers/tests.rs +++ b/easytier/src/peers/tests.rs @@ -115,7 +115,7 @@ async fn foreign_mgr_stress_test() { i, p.list_routes().await, p.list_global_foreign_network().await.foreign_networks.len(), - p.get_peer_map().list_peers().await + p.get_peer_map().list_peers() ); } tokio::time::sleep(std::time::Duration::from_secs(1)).await;