mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-05-07 02:09:06 +00:00
improve perf of remove_network in foreign net mgr (#1847)
This commit is contained in:
@@ -48,7 +48,7 @@ impl ForeignNetworkClient {
|
||||
}
|
||||
|
||||
pub async fn list_public_peers(&self) -> Vec<PeerId> {
|
||||
self.peer_map.list_peers().await
|
||||
self.peer_map.list_peers()
|
||||
}
|
||||
|
||||
pub fn get_next_hop(&self, peer_id: PeerId) -> Option<PeerId> {
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -266,7 +266,7 @@ impl PeerMap {
|
||||
self.peer_map.is_empty()
|
||||
}
|
||||
|
||||
pub async fn list_peers(&self) -> Vec<PeerId> {
|
||||
pub fn list_peers(&self) -> Vec<PeerId> {
|
||||
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<PeerId> {
|
||||
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);
|
||||
|
||||
@@ -3289,7 +3289,6 @@ mod tests {
|
||||
routable_peer
|
||||
.get_peer_map()
|
||||
.list_peers()
|
||||
.await
|
||||
.into_iter()
|
||||
.collect::<BTreeSet<PeerId>>()
|
||||
);
|
||||
|
||||
@@ -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()
|
||||
);
|
||||
|
||||
|
||||
@@ -33,13 +33,12 @@ impl PeerManagerRpcService {
|
||||
}
|
||||
|
||||
pub async fn list_peers(peer_manager: &PeerManager) -> Vec<PeerInfo> {
|
||||
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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user