*: Update to libp2p v0.21.1 (#6559)

* *Cargo.toml: Update versions

* client/network/src/discovery: Adjust to Kademlia  API changes

* client/network: Adjust to one_shot.rs changes

* client/network/discovery: Log address list on trace level

* client/network/discovery: Ignore RoutablePeer and PendingRoutablePeer

* Commit Cargo.lock

* Finish update

Co-authored-by: Pierre Krieger <pierre.krieger1708@gmail.com>
This commit is contained in:
Max Inden
2020-07-08 16:00:30 +02:00
committed by GitHub
parent 8ca05879e8
commit faa72caf91
18 changed files with 171 additions and 128 deletions
+23 -32
View File
@@ -108,7 +108,7 @@ impl DiscoveryConfig {
{
for (peer_id, addr) in user_defined {
for kad in self.kademlias.values_mut() {
kad.add_address(&peer_id, addr.clone())
kad.add_address(&peer_id, addr.clone());
}
self.user_defined.push((peer_id, addr))
}
@@ -230,12 +230,18 @@ pub struct DiscoveryBehaviour {
impl DiscoveryBehaviour {
/// Returns the list of nodes that we know exist in the network.
pub fn known_peers(&mut self) -> impl Iterator<Item = &PeerId> {
let mut set = HashSet::new();
for p in self.kademlias.values_mut().map(|k| k.kbuckets_entries()).flatten() {
set.insert(p);
pub fn known_peers(&mut self) -> HashSet<PeerId> {
let mut peers = HashSet::new();
for k in self.kademlias.values_mut() {
for b in k.kbuckets() {
for e in b.iter() {
if !peers.contains(e.node.key.preimage()) {
peers.insert(e.node.key.preimage().clone());
}
}
}
}
set.into_iter()
peers
}
/// Adds a hard-coded address for the given peer, that never expires.
@@ -246,7 +252,7 @@ impl DiscoveryBehaviour {
pub fn add_known_address(&mut self, peer_id: PeerId, addr: Multiaddr) {
if self.user_defined.iter().all(|(p, a)| *p != peer_id && *a != addr) {
for k in self.kademlias.values_mut() {
k.add_address(&peer_id, addr.clone())
k.add_address(&peer_id, addr.clone());
}
self.pending_events.push_back(DiscoveryOut::Discovered(peer_id.clone()));
self.user_defined.push((peer_id, addr));
@@ -260,7 +266,7 @@ impl DiscoveryBehaviour {
pub fn add_self_reported_address(&mut self, peer_id: &PeerId, addr: Multiaddr) {
if self.allow_non_globals_in_dht || self.can_add_to_dht(&addr) {
for k in self.kademlias.values_mut() {
k.add_address(peer_id, addr.clone())
k.add_address(peer_id, addr.clone());
}
} else {
log::trace!(target: "sub-libp2p", "Ignoring self-reported address {} from {}", addr, peer_id);
@@ -291,7 +297,8 @@ impl DiscoveryBehaviour {
/// Returns the number of nodes that are in the Kademlia k-buckets.
pub fn num_kbuckets_entries(&mut self) -> impl ExactSizeIterator<Item = (&ProtocolId, usize)> {
self.kademlias.iter_mut().map(|(id, kad)| (id, kad.kbuckets_entries().count()))
self.kademlias.iter_mut()
.map(|(id, kad)| (id, kad.kbuckets().map(|bucket| bucket.iter().count()).sum()))
}
/// Returns the number of records in the Kademlia record stores.
@@ -407,23 +414,7 @@ impl NetworkBehaviour for DiscoveryBehaviour {
list.extend(list_to_filter);
}
if !list.is_empty() {
trace!(target: "sub-libp2p", "Addresses of {:?}: {:?}", peer_id, list);
} else {
let mut has_entry = false;
for k in self.kademlias.values_mut() {
if k.kbuckets_entries().any(|p| p == peer_id) {
has_entry = true;
break
}
}
if has_entry {
trace!(target: "sub-libp2p", "Addresses of {:?}: none (peer in k-buckets)", peer_id);
} else {
trace!(target: "sub-libp2p", "Addresses of {:?}: none (peer not in k-buckets)", peer_id);
}
}
trace!(target: "sub-libp2p", "Addresses of {:?}: {:?}", peer_id, list);
list
}
@@ -570,13 +561,16 @@ impl NetworkBehaviour for DiscoveryBehaviour {
while let Poll::Ready(ev) = kademlia.poll(cx, params) {
match ev {
NetworkBehaviourAction::GenerateEvent(ev) => match ev {
KademliaEvent::RoutingUpdated { peer, .. } => {
let ev = DiscoveryOut::Discovered(peer);
return Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev));
}
KademliaEvent::UnroutablePeer { peer, .. } => {
let ev = DiscoveryOut::UnroutablePeer(peer);
return Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev));
}
KademliaEvent::RoutingUpdated { peer, .. } => {
let ev = DiscoveryOut::Discovered(peer);
return Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev));
KademliaEvent::RoutablePeer { .. } | KademliaEvent::PendingRoutablePeer { .. } => {
// We are not interested in these events at the moment.
}
KademliaEvent::QueryResult { result: QueryResult::GetClosestPeers(res), .. } => {
match res {
@@ -640,9 +634,6 @@ impl NetworkBehaviour for DiscoveryBehaviour {
e.key(), e)
}
}
KademliaEvent::Discovered { .. } => {
// We are not interested in these events at the moment.
}
// We never start any other type of query.
e => {
warn!(target: "sub-libp2p", "Libp2p => Unhandled Kademlia event: {:?}", e)