mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 03:31:10 +00:00
Rework priority groups, take 2 (#7700)
* Rework priority groups * Broken tests fix * Fix warning causing CI to fail * [Hack] Try restore backwards-compatibility * Fix peerset bug * Doc fixes and clean up * Error on state mismatch * Try debug CI * CI debugging * [CI debug] Can I please see this line * Revert "[CI debug] Can I please see this line" This reverts commit 4b7cf7c1511f579cd818b21d46bd11642dfac5cb. * Revert "CI debugging" This reverts commit 9011f1f564b860386dc7dd6ffa9fc34ea7107623. * Fix error! which isn't actually an error * Fix Ok() returned when actually Err() * Tweaks and fixes * Fix build * Peerset bugfix * [Debug] Try outbound GrandPa slots * Another bugfix * Revert "[Debug] Try outbound GrandPa slots" This reverts commit d175b9208c088faad77d9f0ce36ff6f48bd92dd3. * [Debug] Try outbound GrandPa slots * Apply suggestions from code review Co-authored-by: Max Inden <mail@max-inden.de> * Use consts for hardcoded peersets * Revert "Try debug CI" This reverts commit 62c4ad5e79c03d561c714a008022ecac463a597e. * Renames * Line widths * Add doc Co-authored-by: Max Inden <mail@max-inden.de>
This commit is contained in:
@@ -180,6 +180,12 @@ impl<B: BlockT> Future for GossipEngine<B> {
|
||||
ForwardingState::Idle => {
|
||||
match this.network_event_stream.poll_next_unpin(cx) {
|
||||
Poll::Ready(Some(event)) => match event {
|
||||
Event::SyncConnected { remote } => {
|
||||
this.network.add_set_reserved(remote, this.protocol.clone());
|
||||
}
|
||||
Event::SyncDisconnected { remote } => {
|
||||
this.network.remove_set_reserved(remote, this.protocol.clone());
|
||||
}
|
||||
Event::NotificationStreamOpened { remote, protocol, role } => {
|
||||
if protocol != this.protocol {
|
||||
continue;
|
||||
@@ -325,10 +331,16 @@ mod tests {
|
||||
fn report_peer(&self, _: PeerId, _: ReputationChange) {
|
||||
}
|
||||
|
||||
fn disconnect_peer(&self, _: PeerId) {
|
||||
fn disconnect_peer(&self, _: PeerId, _: Cow<'static, str>) {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
fn add_set_reserved(&self, _: PeerId, _: Cow<'static, str>) {
|
||||
}
|
||||
|
||||
fn remove_set_reserved(&self, _: PeerId, _: Cow<'static, str>) {
|
||||
}
|
||||
|
||||
fn write_notification(&self, _: PeerId, _: Cow<'static, str>, _: Vec<u8>) {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
@@ -40,6 +40,11 @@
|
||||
//! - Use the methods of the `GossipEngine` in order to send out messages and receive incoming
|
||||
//! messages.
|
||||
//!
|
||||
//! The `GossipEngine` will automatically use `Network::add_set_reserved` and
|
||||
//! `Network::remove_set_reserved` to maintain a set of peers equal to the set of peers the
|
||||
//! node is syncing from. See the documentation of `sc-network` for more explanations about the
|
||||
//! concepts of peer sets.
|
||||
//!
|
||||
//! # What is a validator?
|
||||
//!
|
||||
//! The primary role of a `Validator` is to process incoming messages from peers, and decide
|
||||
@@ -61,9 +66,9 @@ pub use self::state_machine::TopicNotification;
|
||||
pub use self::validator::{DiscardAll, MessageIntent, Validator, ValidatorContext, ValidationResult};
|
||||
|
||||
use futures::prelude::*;
|
||||
use sc_network::{Event, ExHashT, NetworkService, PeerId, ReputationChange};
|
||||
use sc_network::{multiaddr, Event, ExHashT, NetworkService, PeerId, ReputationChange};
|
||||
use sp_runtime::{traits::Block as BlockT};
|
||||
use std::{borrow::Cow, pin::Pin, sync::Arc};
|
||||
use std::{borrow::Cow, iter, pin::Pin, sync::Arc};
|
||||
|
||||
mod bridge;
|
||||
mod state_machine;
|
||||
@@ -77,8 +82,14 @@ pub trait Network<B: BlockT> {
|
||||
/// Adjust the reputation of a node.
|
||||
fn report_peer(&self, peer_id: PeerId, reputation: ReputationChange);
|
||||
|
||||
/// Adds the peer to the set of peers to be connected to with this protocol.
|
||||
fn add_set_reserved(&self, who: PeerId, protocol: Cow<'static, str>);
|
||||
|
||||
/// Removes the peer from the set of peers to be connected to with this protocol.
|
||||
fn remove_set_reserved(&self, who: PeerId, protocol: Cow<'static, str>);
|
||||
|
||||
/// Force-disconnect a peer.
|
||||
fn disconnect_peer(&self, who: PeerId);
|
||||
fn disconnect_peer(&self, who: PeerId, protocol: Cow<'static, str>);
|
||||
|
||||
/// Send a notification to a peer.
|
||||
fn write_notification(&self, who: PeerId, protocol: Cow<'static, str>, message: Vec<u8>);
|
||||
@@ -99,8 +110,26 @@ impl<B: BlockT, H: ExHashT> Network<B> for Arc<NetworkService<B, H>> {
|
||||
NetworkService::report_peer(self, peer_id, reputation);
|
||||
}
|
||||
|
||||
fn disconnect_peer(&self, who: PeerId) {
|
||||
NetworkService::disconnect_peer(self, who)
|
||||
fn add_set_reserved(&self, who: PeerId, protocol: Cow<'static, str>) {
|
||||
let addr = iter::once(multiaddr::Protocol::P2p(who.into()))
|
||||
.collect::<multiaddr::Multiaddr>();
|
||||
let result = NetworkService::add_to_peers_set(self, protocol, iter::once(addr).collect());
|
||||
if let Err(err) = result {
|
||||
log::error!(target: "gossip", "add_set_reserved failed: {}", err);
|
||||
}
|
||||
}
|
||||
|
||||
fn remove_set_reserved(&self, who: PeerId, protocol: Cow<'static, str>) {
|
||||
let addr = iter::once(multiaddr::Protocol::P2p(who.into()))
|
||||
.collect::<multiaddr::Multiaddr>();
|
||||
let result = NetworkService::remove_from_peers_set(self, protocol, iter::once(addr).collect());
|
||||
if let Err(err) = result {
|
||||
log::error!(target: "gossip", "remove_set_reserved failed: {}", err);
|
||||
}
|
||||
}
|
||||
|
||||
fn disconnect_peer(&self, who: PeerId, protocol: Cow<'static, str>) {
|
||||
NetworkService::disconnect_peer(self, who, protocol)
|
||||
}
|
||||
|
||||
fn write_notification(&self, who: PeerId, protocol: Cow<'static, str>, message: Vec<u8>) {
|
||||
|
||||
@@ -495,10 +495,16 @@ mod tests {
|
||||
self.inner.lock().unwrap().peer_reports.push((peer_id, reputation_change));
|
||||
}
|
||||
|
||||
fn disconnect_peer(&self, _: PeerId) {
|
||||
fn disconnect_peer(&self, _: PeerId, _: Cow<'static, str>) {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
fn add_set_reserved(&self, _: PeerId, _: Cow<'static, str>) {
|
||||
}
|
||||
|
||||
fn remove_set_reserved(&self, _: PeerId, _: Cow<'static, str>) {
|
||||
}
|
||||
|
||||
fn write_notification(&self, _: PeerId, _: Cow<'static, str>, _: Vec<u8>) {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user