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:
Pierre Krieger
2021-01-07 14:52:39 +01:00
committed by GitHub
parent 94bb119ef9
commit 779c4f8616
30 changed files with 2742 additions and 2293 deletions
+13 -1
View File
@@ -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!();
}
+34 -5
View File
@@ -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!();
}