aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2022-05-09 12:00:01 +0200
committerAlex Auvolat <alex@adnab.me>2022-05-09 12:00:01 +0200
commit12fb3516c080c87a9d5e2c087d973ae0936983d5 (patch)
treee444cf6dd19a25af6e13a0e7a582a873b0b03b3e
parent677c47154817857c806ec755bae6cf1b83023cc3 (diff)
downloadnetapp-12fb3516c080c87a9d5e2c087d973ae0936983d5.tar.gz
netapp-12fb3516c080c87a9d5e2c087d973ae0936983d5.zip
Also add addresses from incoming connections
-rw-r--r--src/peering/fullmesh.rs19
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) {