mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 00:01:09 +00:00
*: 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:
@@ -29,7 +29,13 @@ use libp2p::swarm::{NetworkBehaviourAction, NetworkBehaviourEventProcess, PollPa
|
||||
use log::debug;
|
||||
use sp_consensus::{BlockOrigin, import_queue::{IncomingBlock, Origin}};
|
||||
use sp_runtime::{traits::{Block as BlockT, NumberFor}, ConsensusEngineId, Justification};
|
||||
use std::{borrow::Cow, collections::VecDeque, iter, task::{Context, Poll}, time::Duration};
|
||||
use std::{
|
||||
borrow::Cow,
|
||||
collections::{HashSet, VecDeque},
|
||||
iter,
|
||||
task::{Context, Poll},
|
||||
time::Duration,
|
||||
};
|
||||
|
||||
/// General behaviour of the network. Combines all protocols together.
|
||||
#[derive(NetworkBehaviour)]
|
||||
@@ -124,7 +130,7 @@ impl<B: BlockT, H: ExHashT> Behaviour<B, H> {
|
||||
}
|
||||
|
||||
/// Returns the list of nodes that we know exist in the network.
|
||||
pub fn known_peers(&mut self) -> impl Iterator<Item = &PeerId> {
|
||||
pub fn known_peers(&mut self) -> HashSet<PeerId> {
|
||||
self.discovery.known_peers()
|
||||
}
|
||||
|
||||
|
||||
@@ -455,8 +455,8 @@ where
|
||||
marker: PhantomData,
|
||||
};
|
||||
let mut cfg = OneShotHandlerConfig::default();
|
||||
cfg.inactive_timeout = self.config.inactivity_timeout;
|
||||
cfg.substream_timeout = self.config.request_timeout;
|
||||
cfg.keep_alive_timeout = self.config.inactivity_timeout;
|
||||
cfg.outbound_substream_timeout = self.config.request_timeout;
|
||||
OneShotHandler::new(SubstreamProtocol::new(p), cfg)
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -234,7 +234,7 @@ where
|
||||
marker: PhantomData,
|
||||
};
|
||||
let mut cfg = OneShotHandlerConfig::default();
|
||||
cfg.inactive_timeout = self.config.inactivity_timeout;
|
||||
cfg.keep_alive_timeout = self.config.inactivity_timeout;
|
||||
OneShotHandler::new(SubstreamProtocol::new(p), cfg)
|
||||
}
|
||||
|
||||
|
||||
@@ -757,7 +757,7 @@ where
|
||||
protocol: self.config.light_protocol.clone(),
|
||||
};
|
||||
let mut cfg = OneShotHandlerConfig::default();
|
||||
cfg.inactive_timeout = self.config.inactivity_timeout;
|
||||
cfg.keep_alive_timeout = self.config.inactivity_timeout;
|
||||
OneShotHandler::new(SubstreamProtocol::new(p), cfg)
|
||||
}
|
||||
|
||||
|
||||
@@ -490,17 +490,18 @@ impl<B: BlockT + 'static, H: ExHashT> NetworkWorker<B, H> {
|
||||
|
||||
let not_connected_peers = {
|
||||
let swarm = &mut *swarm;
|
||||
let list = swarm.known_peers().filter(|p| open.iter().all(|n| n != *p))
|
||||
.cloned().collect::<Vec<_>>();
|
||||
list.into_iter().map(move |peer_id| {
|
||||
(peer_id.to_base58(), NetworkStateNotConnectedPeer {
|
||||
version_string: swarm.node(&peer_id)
|
||||
.and_then(|i| i.client_version().map(|s| s.to_owned())),
|
||||
latest_ping_time: swarm.node(&peer_id).and_then(|i| i.latest_ping()),
|
||||
known_addresses: NetworkBehaviour::addresses_of_peer(&mut **swarm, &peer_id)
|
||||
.into_iter().collect(),
|
||||
swarm.known_peers().into_iter()
|
||||
.filter(|p| open.iter().all(|n| n != p))
|
||||
.map(move |peer_id| {
|
||||
(peer_id.to_base58(), NetworkStateNotConnectedPeer {
|
||||
version_string: swarm.node(&peer_id)
|
||||
.and_then(|i| i.client_version().map(|s| s.to_owned())),
|
||||
latest_ping_time: swarm.node(&peer_id).and_then(|i| i.latest_ping()),
|
||||
known_addresses: NetworkBehaviour::addresses_of_peer(&mut **swarm, &peer_id)
|
||||
.into_iter().collect(),
|
||||
})
|
||||
})
|
||||
}).collect()
|
||||
.collect()
|
||||
};
|
||||
|
||||
NetworkState {
|
||||
|
||||
Reference in New Issue
Block a user