mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-28 14:27:57 +00:00
simplification of peerset api (#2123)
* Introduction of PeersetHandle * integrate PeersetHandle with the rest of the codebase * fix compilation errors * more tests for peerset, fixed overwriting bug in add_reserved_peer * Slots data structure and bugfixes for peerset * bend to pressure * updated lru-cache to 0.1.2 and updated linked-hash-map to 0.5.2 * peerset discovered list is now a LinkedHashMap * fix review suggestions * split back Peerset and PeersetHandle * test for Peerset::discovered * applied review suggestions * fixes to peerset::incoming * peerset disconnects are all instantaneous * instantaneous drop in peerset finished * Peerset::set_reserved_only can also reconnect nodes * Peerset scores cache uses lru-cache * remove redundant function call and comment from Peerset::on_set_reserved_only * add_peer returns SlotState enum * apply review suggestions * is_reserved -> is_connected_and_reserved
This commit is contained in:
@@ -58,7 +58,7 @@ impl<TMessage, TSubstream> Behaviour<TMessage, TSubstream> {
|
||||
local_public_key: PublicKey,
|
||||
protocol: RegisteredProtocol<TMessage>,
|
||||
known_addresses: Vec<(PeerId, Multiaddr)>,
|
||||
peerset: substrate_peerset::PeersetMut,
|
||||
peerset: substrate_peerset::Peerset,
|
||||
enable_mdns: bool,
|
||||
) -> Self {
|
||||
let identify = {
|
||||
|
||||
@@ -31,7 +31,7 @@ pub struct CustomProto<TMessage, TSubstream> {
|
||||
protocol: RegisteredProtocol<TMessage>,
|
||||
|
||||
/// Receiver for instructions about who to connect to or disconnect from.
|
||||
peerset: substrate_peerset::PeersetMut,
|
||||
peerset: substrate_peerset::Peerset,
|
||||
|
||||
/// List of peers in our state.
|
||||
peers: FnvHashMap<PeerId, PeerState>,
|
||||
@@ -175,7 +175,7 @@ impl<TMessage, TSubstream> CustomProto<TMessage, TSubstream> {
|
||||
/// Creates a `CustomProtos`.
|
||||
pub fn new(
|
||||
protocol: RegisteredProtocol<TMessage>,
|
||||
peerset: substrate_peerset::PeersetMut,
|
||||
peerset: substrate_peerset::Peerset,
|
||||
) -> Self {
|
||||
CustomProto {
|
||||
protocol,
|
||||
@@ -213,7 +213,7 @@ impl<TMessage, TSubstream> CustomProto<TMessage, TSubstream> {
|
||||
// DisabledPendingEnable => Disabled.
|
||||
PeerState::DisabledPendingEnable { open, connected_point, timer } => {
|
||||
debug!(target: "sub-libp2p", "PSM <= Dropped({:?})", peer_id);
|
||||
self.peerset.dropped(peer_id);
|
||||
self.peerset.dropped(peer_id.clone());
|
||||
let banned_until = Some(if let Some(ban) = ban {
|
||||
cmp::max(timer.deadline(), Instant::now() + ban)
|
||||
} else {
|
||||
@@ -225,7 +225,7 @@ impl<TMessage, TSubstream> CustomProto<TMessage, TSubstream> {
|
||||
// Enabled => Disabled.
|
||||
PeerState::Enabled { open, connected_point } => {
|
||||
debug!(target: "sub-libp2p", "PSM <= Dropped({:?})", peer_id);
|
||||
self.peerset.dropped(peer_id);
|
||||
self.peerset.dropped(peer_id.clone());
|
||||
debug!(target: "sub-libp2p", "Handler({:?}) <= Disable", peer_id);
|
||||
self.events.push(NetworkBehaviourAction::SendEvent {
|
||||
peer_id: peer_id.clone(),
|
||||
@@ -484,7 +484,7 @@ impl<TMessage, TSubstream> CustomProto<TMessage, TSubstream> {
|
||||
debug!(target: "sub-libp2p", "PSM => Accept({:?}, {:?}): Obsolete incoming,
|
||||
sending back dropped", index, incoming.peer_id);
|
||||
debug!(target: "sub-libp2p", "PSM <= Dropped({:?})", incoming.peer_id);
|
||||
self.peerset.dropped(&incoming.peer_id);
|
||||
self.peerset.dropped(incoming.peer_id.clone());
|
||||
return
|
||||
}
|
||||
|
||||
@@ -662,7 +662,7 @@ where
|
||||
debug!(target: "sub-libp2p", "Libp2p => Disconnected({:?}): Was disabled \
|
||||
(through {:?}) but pending enable", peer_id, endpoint);
|
||||
debug!(target: "sub-libp2p", "PSM <= Dropped({:?})", peer_id);
|
||||
self.peerset.dropped(peer_id);
|
||||
self.peerset.dropped(peer_id.clone());
|
||||
self.peers.insert(peer_id.clone(), PeerState::Banned { until: timer.deadline() });
|
||||
if open {
|
||||
debug!(target: "sub-libp2p", "External API <= Closed({:?})", peer_id);
|
||||
@@ -679,7 +679,7 @@ where
|
||||
debug!(target: "sub-libp2p", "Libp2p => Disconnected({:?}): Was enabled \
|
||||
(through {:?})", peer_id, endpoint);
|
||||
debug!(target: "sub-libp2p", "PSM <= Dropped({:?})", peer_id);
|
||||
self.peerset.dropped(peer_id);
|
||||
self.peerset.dropped(peer_id.clone());
|
||||
|
||||
if open {
|
||||
debug!(target: "sub-libp2p", "External API <= Closed({:?})", peer_id);
|
||||
@@ -730,7 +730,7 @@ where
|
||||
until: Instant::now() + Duration::from_secs(5)
|
||||
};
|
||||
debug!(target: "sub-libp2p", "PSM <= Dropped({:?})", peer_id);
|
||||
self.peerset.dropped(peer_id)
|
||||
self.peerset.dropped(peer_id.clone())
|
||||
},
|
||||
|
||||
// We can still get dial failures even if we are already connected to the node,
|
||||
|
||||
@@ -38,7 +38,7 @@ use std::time::Duration;
|
||||
pub fn start_service<TMessage>(
|
||||
config: NetworkConfiguration,
|
||||
registered_custom: RegisteredProtocol<TMessage>,
|
||||
) -> Result<(Service<TMessage>, Arc<substrate_peerset::Peerset>), IoError>
|
||||
) -> Result<(Service<TMessage>, substrate_peerset::PeersetHandle), IoError>
|
||||
where TMessage: CustomMessage + Send + 'static {
|
||||
|
||||
if let Some(ref path) = config.net_config_path {
|
||||
@@ -72,7 +72,7 @@ where TMessage: CustomMessage + Send + 'static {
|
||||
}
|
||||
|
||||
// Build the peerset.
|
||||
let (peerset, peerset_receiver) = substrate_peerset::Peerset::from_config(substrate_peerset::PeersetConfig {
|
||||
let (peerset, peerset_handle) = substrate_peerset::Peerset::from_config(substrate_peerset::PeersetConfig {
|
||||
in_peers: config.in_peers,
|
||||
out_peers: config.out_peers,
|
||||
bootnodes,
|
||||
@@ -88,7 +88,7 @@ where TMessage: CustomMessage + Send + 'static {
|
||||
// Build the swarm.
|
||||
let (mut swarm, bandwidth) = {
|
||||
let user_agent = format!("{} ({})", config.client_version, config.node_name);
|
||||
let behaviour = Behaviour::new(user_agent, local_public, registered_custom, known_addresses, peerset_receiver, config.enable_mdns);
|
||||
let behaviour = Behaviour::new(user_agent, local_public, registered_custom, known_addresses, peerset, config.enable_mdns);
|
||||
let (transport, bandwidth) = transport::build_transport(local_identity);
|
||||
(Swarm::new(transport, behaviour, local_peer_id.clone()), bandwidth)
|
||||
};
|
||||
@@ -116,7 +116,7 @@ where TMessage: CustomMessage + Send + 'static {
|
||||
injected_events: Vec::new(),
|
||||
};
|
||||
|
||||
Ok((service, peerset))
|
||||
Ok((service, peerset_handle))
|
||||
}
|
||||
|
||||
/// Event produced by the service.
|
||||
|
||||
Reference in New Issue
Block a user