diff --git a/node/network/bridge/src/lib.rs b/node/network/bridge/src/lib.rs index 1d92a95c148d..aa5110ebee88 100644 --- a/node/network/bridge/src/lib.rs +++ b/node/network/bridge/src/lib.rs @@ -57,7 +57,7 @@ mod validator_discovery; mod network; use network::{send_message, Network}; -use crate::network::get_peer_id_by_authority_id; +use crate::network::get_addrs_by_authority_id; #[cfg(test)] mod tests; @@ -586,12 +586,12 @@ where let ads = &mut authority_discovery_service; let mut gossip_peers = HashSet::with_capacity(our_neighbors.len()); for authority in our_neighbors { - let addr = get_peer_id_by_authority_id( + let addrs = get_addrs_by_authority_id( ads, - authority.clone(), + authority, ).await; - if let Some(peer_id) = addr { + for (peer_id, _) in addrs { gossip_peers.insert(peer_id); } } diff --git a/node/network/bridge/src/network.rs b/node/network/bridge/src/network.rs index d5114f72b452..5716fa490748 100644 --- a/node/network/bridge/src/network.rs +++ b/node/network/bridge/src/network.rs @@ -157,17 +157,9 @@ impl Network for Arc> { let mut found_peer_id = None; // Note: `get_addresses_by_authority_id` searched in a cache, and it thus expected // to be very quick. - for addr in authority_discovery - .get_addresses_by_authority_id(authority) - .await - .into_iter() - .flat_map(|list| list.into_iter()) - { - let (peer_id, addr) = match parse_addr(addr) { - Ok(v) => v, - Err(_) => continue, - }; - NetworkService::add_known_address(&*self, peer_id.clone(), addr); + let addrs = get_addrs_by_authority_id(authority_discovery, authority).await; + for (peer_id, multiaddr) in addrs { + NetworkService::add_known_address(&*self, peer_id.clone(), multiaddr); found_peer_id = Some(peer_id); } found_peer_id @@ -202,11 +194,10 @@ impl Network for Arc> { } } -/// We assume one `peer_id` per `authority_id`. -pub async fn get_peer_id_by_authority_id( +pub async fn get_addrs_by_authority_id( authority_discovery: &mut AD, authority: AuthorityDiscoveryId, -) -> Option { +) -> impl Iterator { // Note: `get_addresses_by_authority_id` searched in a cache, and it thus expected // to be very quick. authority_discovery @@ -214,5 +205,5 @@ pub async fn get_peer_id_by_authority_id( .await .into_iter() .flat_map(|list| list.into_iter()) - .find_map(|addr| parse_addr(addr).ok().map(|(p, _)| p)) + .flat_map(|addr| parse_addr(addr).ok()) }