fix ipv4 map use old peer_id, fix direct connector use ring

This commit is contained in:
sijie.sun
2024-03-23 17:28:50 +08:00
committed by Sijie.Sun
parent 9ed22eaf99
commit 269146c9f8
2 changed files with 29 additions and 13 deletions

View File

@@ -240,8 +240,13 @@ impl DirectConnectorManager {
})
.await?;
let listener = ip_list
let available_listeners = ip_list
.listeners
.iter()
.filter_map(|l| if l.scheme() != "ring" { Some(l) } else { None })
.collect::<Vec<_>>();
let listener = available_listeners
.get(0)
.ok_or(anyhow::anyhow!("peer {} have no listener", dst_peer_id))?;

View File

@@ -392,10 +392,8 @@ impl RouteTable {
}
fn build_from_synced_info(&self, my_peer_id: PeerId, synced_info: &SyncedRouteInfo) {
// build ipv4_peer_id_map, cidr_peer_id_map and peer_infos
// build peer_infos
self.peer_infos.clear();
self.ipv4_peer_id_map.clear();
self.cidr_peer_id_map.clear();
for item in synced_info.peer_infos.iter() {
let peer_id = item.key();
let info = item.value();
@@ -405,15 +403,6 @@ impl RouteTable {
}
self.peer_infos.insert(*peer_id, info.clone());
if let Some(ipv4_addr) = info.ipv4_addr {
self.ipv4_peer_id_map.insert(ipv4_addr, *peer_id);
}
for cidr in info.proxy_cidrs.iter() {
self.cidr_peer_id_map
.insert(cidr.parse().unwrap(), *peer_id);
}
}
// build next hop map
@@ -441,6 +430,28 @@ impl RouteTable {
.insert(peer_id, (path[1], (path.len() - 1) as i32));
}
}
// build ipv4_peer_id_map, cidr_peer_id_map
self.ipv4_peer_id_map.clear();
self.cidr_peer_id_map.clear();
for item in self.peer_infos.iter() {
// only set ipv4 map for peers we can reach.
if !self.next_hop_map.contains_key(item.key()) {
continue;
}
let peer_id = item.key();
let info = item.value();
if let Some(ipv4_addr) = info.ipv4_addr {
self.ipv4_peer_id_map.insert(ipv4_addr, *peer_id);
}
for cidr in info.proxy_cidrs.iter() {
self.cidr_peer_id_map
.insert(cidr.parse().unwrap(), *peer_id);
}
}
}
fn get_peer_id_for_proxy(&self, ipv4: &Ipv4Addr) -> Option<PeerId> {