split NetworkBridge into two subsystems (#5616)

* foo

* rolling session window

* fixup

* remove use statemetn

* fmt

* split NetworkBridge into two subsystems

Pending cleanup

* split

* chore: reexport OrchestraError as OverseerError

* chore: silence warnings

* fixup tests

* chore: add default timenout of 30s to subsystem test helper ctx handle

* single item channel

* fixins

* fmt

* cleanup

* remove dead code

* remove sync bounds again

* wire up shared state

* deal with some FIXMEs

* use distinct tags

Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com>

* use tag

Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com>

* address naming

tx and rx are common in networking and also have an implicit meaning regarding networking
compared to incoming and outgoing which are already used with subsystems themselvesq

* remove unused sync oracle

* remove unneeded state

* fix tests

* chore: fmt

* do not try to register twice

* leak Metrics type

Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com>
Co-authored-by: Andronik <write@reusable.software>
This commit is contained in:
Bernhard Schuster
2022-07-12 18:22:36 +02:00
committed by GitHub
parent c11c1f38f4
commit 3240cb5e4d
40 changed files with 1880 additions and 1429 deletions
@@ -39,7 +39,7 @@ use polkadot_node_primitives::{CollationSecondedSignal, PoV, Statement};
use polkadot_node_subsystem::{
jaeger,
messages::{
CollatorProtocolMessage, NetworkBridgeEvent, NetworkBridgeMessage, RuntimeApiMessage,
CollatorProtocolMessage, NetworkBridgeEvent, NetworkBridgeTxMessage, RuntimeApiMessage,
},
overseer, FromOrchestra, OverseerSignal, PerLeafSpan,
};
@@ -533,7 +533,7 @@ async fn declare<Context>(ctx: &mut Context, state: &mut State, peer: PeerId) {
state.collator_pair.sign(&declare_signature_payload),
);
ctx.send_message(NetworkBridgeMessage::SendCollationMessage(
ctx.send_message(NetworkBridgeTxMessage::SendCollationMessage(
vec![peer],
Versioned::V1(protocol_v1::CollationProtocol::CollatorProtocol(wire_message)),
))
@@ -551,7 +551,7 @@ async fn connect_to_validators<Context>(
// ignore address resolution failure
// will reissue a new request on new collation
let (failed, _) = oneshot::channel();
ctx.send_message(NetworkBridgeMessage::ConnectToValidators {
ctx.send_message(NetworkBridgeTxMessage::ConnectToValidators {
validator_ids,
peer_set: PeerSet::Collation,
failed,
@@ -608,7 +608,7 @@ async fn advertise_collation<Context>(
let wire_message = protocol_v1::CollatorProtocolMessage::AdvertiseCollation(relay_parent);
ctx.send_message(NetworkBridgeMessage::SendCollationMessage(
ctx.send_message(NetworkBridgeTxMessage::SendCollationMessage(
vec![peer.clone()],
Versioned::V1(protocol_v1::CollationProtocol::CollatorProtocol(wire_message)),
))
@@ -751,7 +751,7 @@ async fn handle_incoming_peer_message<Context>(
);
// If we are declared to, this is another collator, and we should disconnect.
ctx.send_message(NetworkBridgeMessage::DisconnectPeer(origin, PeerSet::Collation))
ctx.send_message(NetworkBridgeTxMessage::DisconnectPeer(origin, PeerSet::Collation))
.await;
},
AdvertiseCollation(_) => {
@@ -761,14 +761,14 @@ async fn handle_incoming_peer_message<Context>(
"AdvertiseCollation message is not expected on the collator side of the protocol",
);
ctx.send_message(NetworkBridgeMessage::ReportPeer(
ctx.send_message(NetworkBridgeTxMessage::ReportPeer(
origin.clone(),
COST_UNEXPECTED_MESSAGE,
))
.await;
// If we are advertised to, this is another collator, and we should disconnect.
ctx.send_message(NetworkBridgeMessage::DisconnectPeer(origin, PeerSet::Collation))
ctx.send_message(NetworkBridgeTxMessage::DisconnectPeer(origin, PeerSet::Collation))
.await;
},
CollationSeconded(relay_parent, statement) => {
@@ -851,7 +851,7 @@ async fn handle_incoming_request<Context>(
target: LOG_TARGET,
"Dropping incoming request as peer has a request in flight already."
);
ctx.send_message(NetworkBridgeMessage::ReportPeer(req.peer, COST_APPARENT_FLOOD))
ctx.send_message(NetworkBridgeTxMessage::ReportPeer(req.peer, COST_APPARENT_FLOOD))
.await;
return Ok(())
}
@@ -369,8 +369,8 @@ async fn distribute_collation(
if should_connect {
assert_matches!(
overseer_recv(virtual_overseer).await,
AllMessages::NetworkBridge(
NetworkBridgeMessage::ConnectToValidators {
AllMessages::NetworkBridgeTx(
NetworkBridgeTxMessage::ConnectToValidators {
..
}
) => {}
@@ -424,8 +424,8 @@ async fn expect_declare_msg(
) {
assert_matches!(
overseer_recv(virtual_overseer).await,
AllMessages::NetworkBridge(
NetworkBridgeMessage::SendCollationMessage(
AllMessages::NetworkBridgeTx(
NetworkBridgeTxMessage::SendCollationMessage(
to,
Versioned::V1(protocol_v1::CollationProtocol::CollatorProtocol(wire_message)),
)
@@ -458,8 +458,8 @@ async fn expect_advertise_collation_msg(
) {
assert_matches!(
overseer_recv(virtual_overseer).await,
AllMessages::NetworkBridge(
NetworkBridgeMessage::SendCollationMessage(
AllMessages::NetworkBridgeTx(
NetworkBridgeTxMessage::SendCollationMessage(
to,
Versioned::V1(protocol_v1::CollationProtocol::CollatorProtocol(wire_message)),
)
@@ -570,7 +570,7 @@ fn advertise_and_send_collation() {
.unwrap();
assert_matches!(
overseer_recv(&mut virtual_overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::ReportPeer(bad_peer, _)) => {
AllMessages::NetworkBridgeTx(NetworkBridgeTxMessage::ReportPeer(bad_peer, _)) => {
assert_eq!(bad_peer, peer);
}
);
@@ -838,7 +838,7 @@ fn collators_reject_declare_messages() {
assert_matches!(
overseer_recv(virtual_overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::DisconnectPeer(
AllMessages::NetworkBridgeTx(NetworkBridgeTxMessage::DisconnectPeer(
p,
PeerSet::Collation,
)) if p == peer
@@ -34,7 +34,7 @@ use polkadot_node_network_protocol::{
use polkadot_primitives::v2::CollatorPair;
use polkadot_node_subsystem::{
errors::SubsystemError, messages::NetworkBridgeMessage, overseer, SpawnedSubsystem,
errors::SubsystemError, messages::NetworkBridgeTxMessage, overseer, SpawnedSubsystem,
};
mod error;
@@ -132,5 +132,5 @@ async fn modify_reputation(
"reputation change for peer",
);
sender.send_message(NetworkBridgeMessage::ReportPeer(peer, rep)).await;
sender.send_message(NetworkBridgeTxMessage::ReportPeer(peer, rep)).await;
}
@@ -48,7 +48,7 @@ use polkadot_node_subsystem::{
jaeger,
messages::{
CandidateBackingMessage, CollatorProtocolMessage, IfDisconnected, NetworkBridgeEvent,
NetworkBridgeMessage, RuntimeApiMessage,
NetworkBridgeTxMessage, RuntimeApiMessage,
},
overseer, FromOrchestra, OverseerSignal, PerLeafSpan, SubsystemSender,
};
@@ -632,7 +632,7 @@ fn collator_peer_id(
async fn disconnect_peer(sender: &mut impl overseer::CollatorProtocolSenderTrait, peer_id: PeerId) {
sender
.send_message(NetworkBridgeMessage::DisconnectPeer(peer_id, PeerSet::Collation))
.send_message(NetworkBridgeTxMessage::DisconnectPeer(peer_id, PeerSet::Collation))
.await
}
@@ -712,7 +712,7 @@ async fn notify_collation_seconded(
let wire_message =
protocol_v1::CollatorProtocolMessage::CollationSeconded(relay_parent, statement.into());
sender
.send_message(NetworkBridgeMessage::SendCollationMessage(
.send_message(NetworkBridgeTxMessage::SendCollationMessage(
vec![peer_id],
Versioned::V1(protocol_v1::CollationProtocol::CollatorProtocol(wire_message)),
))
@@ -800,7 +800,7 @@ async fn request_collation(
);
sender
.send_message(NetworkBridgeMessage::SendRequests(
.send_message(NetworkBridgeTxMessage::SendRequests(
vec![requests],
IfDisconnected::ImmediateError,
))
@@ -260,7 +260,7 @@ async fn assert_candidate_backing_second(
async fn assert_collator_disconnect(virtual_overseer: &mut VirtualOverseer, expected_peer: PeerId) {
assert_matches!(
overseer_recv(virtual_overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::DisconnectPeer(
AllMessages::NetworkBridgeTx(NetworkBridgeTxMessage::DisconnectPeer(
peer,
peer_set,
)) => {
@@ -278,7 +278,7 @@ async fn assert_fetch_collation_request(
) -> ResponseSender {
assert_matches!(
overseer_recv(virtual_overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendRequests(reqs, IfDisconnected::ImmediateError)
AllMessages::NetworkBridgeTx(NetworkBridgeTxMessage::SendRequests(reqs, IfDisconnected::ImmediateError)
) => {
let req = reqs.into_iter().next()
.expect("There should be exactly one request");
@@ -431,8 +431,8 @@ fn collator_reporting_works() {
assert_matches!(
overseer_recv(&mut virtual_overseer).await,
AllMessages::NetworkBridge(
NetworkBridgeMessage::ReportPeer(peer, rep),
AllMessages::NetworkBridgeTx(
NetworkBridgeTxMessage::ReportPeer(peer, rep),
) => {
assert_eq!(peer, peer_b);
assert_eq!(rep, COST_REPORT_BAD);
@@ -481,8 +481,8 @@ fn collator_authentication_verification_works() {
// it should be reported for sending a message with an invalid signature
assert_matches!(
overseer_recv(&mut virtual_overseer).await,
AllMessages::NetworkBridge(
NetworkBridgeMessage::ReportPeer(peer, rep),
AllMessages::NetworkBridgeTx(
NetworkBridgeTxMessage::ReportPeer(peer, rep),
) => {
assert_eq!(peer, peer_b);
assert_eq!(rep, COST_INVALID_SIGNATURE);
@@ -697,7 +697,7 @@ fn reject_connection_to_next_group() {
assert_matches!(
overseer_recv(&mut virtual_overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::ReportPeer(
AllMessages::NetworkBridgeTx(NetworkBridgeTxMessage::ReportPeer(
peer,
rep,
)) => {
@@ -790,7 +790,7 @@ fn fetch_next_collation_on_invalid_collation() {
assert_matches!(
overseer_recv(&mut virtual_overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::ReportPeer(
AllMessages::NetworkBridgeTx(NetworkBridgeTxMessage::ReportPeer(
peer,
rep,
)) => {
@@ -1005,7 +1005,7 @@ fn disconnect_if_wrong_declare() {
assert_matches!(
overseer_recv(&mut virtual_overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::ReportPeer(
AllMessages::NetworkBridgeTx(NetworkBridgeTxMessage::ReportPeer(
peer,
rep,
)) => {