Skip to content

Commit 85129f8

Browse files
authored
Merge pull request #2244 from subspace/restore-removal-of-outdated-addresses
Restore removal of old addresses
2 parents 7a42947 + 1e478b2 commit 85129f8

File tree

1 file changed

+58
-40
lines changed

1 file changed

+58
-40
lines changed

crates/subspace-networking/src/node_runner.rs

Lines changed: 58 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -731,48 +731,55 @@ where
731731
});
732732

733733
if full_kademlia_support {
734-
//TODO: Consider restoring obsolete address removal
735-
// let old_addresses = kademlia
736-
// .kbucket(peer_id)
737-
// .and_then(|peers| {
738-
// let key = peer_id.into();
739-
// peers.iter().find_map(|peer| {
740-
// (peer.node.key == &key).then_some(
741-
// peer.node
742-
// .value
743-
// .iter()
744-
// .filter(|address| info.listen_addrs.contains(address))
745-
// .cloned()
746-
// .collect::<Vec<_>>(),
747-
// )
748-
// })
749-
// })
750-
// .unwrap_or_default();
751-
752-
// for old_address in old_addresses {
753-
// trace!(
754-
// %local_peer_id,
755-
// %peer_id,
756-
// %old_address,
757-
// "Removing old self-reported address from Kademlia DHT",
758-
// );
759-
//
760-
// kademlia.remove_address(&peer_id, &old_address);
761-
// }
734+
let received_addresses = info
735+
.listen_addrs
736+
.into_iter()
737+
.filter(|address| {
738+
if self.allow_non_global_addresses_in_dht
739+
|| is_global_address_or_dns(address)
740+
{
741+
true
742+
} else {
743+
trace!(
744+
%local_peer_id,
745+
%peer_id,
746+
%address,
747+
"Ignoring self-reported non-global address",
748+
);
762749

763-
for address in info.listen_addrs {
764-
if !self.allow_non_global_addresses_in_dht
765-
&& !is_global_address_or_dns(&address)
766-
{
767-
trace!(
768-
%local_peer_id,
769-
%peer_id,
770-
%address,
771-
"Ignoring self-reported non-global address",
772-
);
773-
continue;
774-
}
750+
false
751+
}
752+
})
753+
.collect::<Vec<_>>();
754+
let received_address_strings = received_addresses
755+
.iter()
756+
.map(ToString::to_string)
757+
.collect::<Vec<_>>();
758+
let old_addresses = kademlia
759+
.kbucket(peer_id)
760+
.and_then(|peers| {
761+
let key = peer_id.into();
762+
peers.iter().find_map(|peer| {
763+
(peer.node.key == &key).then_some(
764+
peer.node
765+
.value
766+
.iter()
767+
.filter(|existing_address| {
768+
let existing_address = existing_address.to_string();
769+
770+
!received_address_strings.iter().any(|received_address| {
771+
received_address.starts_with(&existing_address)
772+
|| existing_address.starts_with(received_address)
773+
})
774+
})
775+
.cloned()
776+
.collect::<Vec<_>>(),
777+
)
778+
})
779+
})
780+
.unwrap_or_default();
775781

782+
for address in received_addresses {
776783
debug!(
777784
%local_peer_id,
778785
%peer_id,
@@ -783,6 +790,17 @@ where
783790

784791
kademlia.add_address(&peer_id, address);
785792
}
793+
794+
for old_address in old_addresses {
795+
trace!(
796+
%local_peer_id,
797+
%peer_id,
798+
%old_address,
799+
"Removing old self-reported address from Kademlia DHT",
800+
);
801+
802+
kademlia.remove_address(&peer_id, &old_address);
803+
}
786804
} else {
787805
debug!(
788806
%local_peer_id,

0 commit comments

Comments
 (0)