diff options
author | Alex Auvolat <alex@adnab.me> | 2022-05-09 12:00:01 +0200 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2022-05-09 12:00:01 +0200 |
commit | 12fb3516c080c87a9d5e2c087d973ae0936983d5 (patch) | |
tree | e444cf6dd19a25af6e13a0e7a582a873b0b03b3e /src | |
parent | 677c47154817857c806ec755bae6cf1b83023cc3 (diff) | |
download | netapp-12fb3516c080c87a9d5e2c087d973ae0936983d5.tar.gz netapp-12fb3516c080c87a9d5e2c087d973ae0936983d5.zip |
Also add addresses from incoming connections
Diffstat (limited to 'src')
-rw-r--r-- | src/peering/fullmesh.rs | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/peering/fullmesh.rs b/src/peering/fullmesh.rs index bb0c9dc..012c5a0 100644 --- a/src/peering/fullmesh.rs +++ b/src/peering/fullmesh.rs @@ -1,4 +1,4 @@ -use std::collections::{hash_map::Entry::Vacant, HashMap, VecDeque}; +use std::collections::{HashMap, VecDeque}; use std::net::SocketAddr; use std::sync::atomic::{self, AtomicU64}; use std::sync::{Arc, RwLock}; @@ -512,12 +512,14 @@ impl FullMeshPeeringStrategy { } fn on_connected(self: Arc<Self>, id: NodeID, addr: SocketAddr, is_incoming: bool) { + let mut known_hosts = self.known_hosts.write().unwrap(); if is_incoming { - let mut known_hosts = self.known_hosts.write().unwrap(); - if let Vacant(entry) = known_hosts.list.entry(id) { - entry.insert(self.new_peer(&id, addr)); - known_hosts.update_hash(); - self.update_public_peer_list(&known_hosts); + if let Some(host) = known_hosts.list.get_mut(&id) { + if !host.all_addrs.contains(&addr) { + host.all_addrs.push(addr); + } + } else { + known_hosts.list.insert(id, self.new_peer(&id, addr)); } } else { info!( @@ -525,7 +527,6 @@ impl FullMeshPeeringStrategy { hex::encode(&id[..8]), addr ); - let mut known_hosts = self.known_hosts.write().unwrap(); if let Some(host) = known_hosts.list.get_mut(&id) { host.state = PeerConnState::Connected; host.addr = addr; @@ -545,9 +546,9 @@ impl FullMeshPeeringStrategy { }, ); } - known_hosts.update_hash(); - self.update_public_peer_list(&known_hosts); } + known_hosts.update_hash(); + self.update_public_peer_list(&known_hosts); } fn on_disconnected(self: Arc<Self>, id: NodeID, is_incoming: bool) { |