Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Prepare for network protocol version upgrades #5084

Merged
merged 26 commits into from
Apr 21, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
2bd9cb1
explicitly tag network requests with version
rphmeier Mar 11, 2022
2f4464d
fmt
rphmeier Mar 11, 2022
b1ed697
make PeerSet more aware of versioning
rphmeier Mar 11, 2022
2f61e49
some generalization of the network bridge to support upgrades
rphmeier Mar 11, 2022
0593b0c
walk back some renaming
rphmeier Mar 11, 2022
5ffc622
walk back some version stuff
rphmeier Mar 11, 2022
2e4f7b0
extract version from fallback
rphmeier Mar 11, 2022
f63da6a
remove V1 from NetworkBridgeUpdate
rphmeier Mar 11, 2022
98ee4da
Merge branch 'master' into rh-network-protocol-upgrades
rphmeier Apr 14, 2022
ebb52bb
add accidentally-removed timer
rphmeier Apr 14, 2022
812da02
implement focusing for versioned messages
rphmeier Apr 14, 2022
5f3de34
fmt
rphmeier Apr 14, 2022
d84984e
fix up network bridge & tests
rphmeier Apr 15, 2022
5cbd94b
remove inaccurate version check in bridge
rphmeier Apr 15, 2022
da8f234
remove some TODO [now]s
rphmeier Apr 15, 2022
91067d6
fix fallout in statement distribution
rphmeier Apr 15, 2022
708a6d6
fmt
rphmeier Apr 15, 2022
d46a3a8
fallout in gossip-support
rphmeier Apr 15, 2022
95d4463
fix fallout in collator-protocol
rphmeier Apr 15, 2022
5c811ec
fix fallout in bitfield-distribution
rphmeier Apr 15, 2022
5fc3b9c
fix fallout in approval-distribution
rphmeier Apr 15, 2022
3e08c99
Merge branch 'master' into rh-network-protocol-upgrades
rphmeier Apr 20, 2022
f30ead9
fmt
rphmeier Apr 20, 2022
382e45e
Merge branch 'master' into rh-network-protocol-upgrades
rphmeier Apr 21, 2022
ac07199
use never!
rphmeier Apr 21, 2022
3bc077e
fmt
rphmeier Apr 21, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Merge branch 'master' into rh-network-protocol-upgrades
  • Loading branch information
rphmeier committed Apr 20, 2022
commit 3e08c993297a6ac4aa2d46e64111653d2c8611da
17 changes: 9 additions & 8 deletions node/network/approval-distribution/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,7 @@ impl State {
+ overseer::SubsystemContext<Message = ApprovalDistributionMessage>),
metrics: &Metrics,
event: NetworkBridgeEvent<net_protocol::ApprovalDistributionMessage>,
rng: &mut (impl CryptoRng + Rng),
) {
match event {
NetworkBridgeEvent::PeerConnected(peer_id, role, _, _) => {
Expand Down Expand Up @@ -502,7 +503,7 @@ impl State {
});
},
NetworkBridgeEvent::PeerMessage(peer_id, Versioned::V1(msg)) => {
self.process_incoming_peer_message(ctx, metrics, peer_id, msg).await;
self.process_incoming_peer_message(ctx, metrics, peer_id, msg, rng).await;
},
}
}
Expand Down Expand Up @@ -1459,7 +1460,7 @@ impl State {
ctx.send_message(NetworkBridgeMessage::SendValidationMessage(
vec![peer_id.clone()],
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Assignments(assignments),
protocol_v1::ApprovalDistributionMessage::Assignments(assignments_to_send),
)),
))
.await;
Expand All @@ -1476,7 +1477,7 @@ impl State {
ctx.send_message(NetworkBridgeMessage::SendValidationMessage(
vec![peer_id],
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Approvals(approvals),
protocol_v1::ApprovalDistributionMessage::Approvals(approvals_to_send),
)),
))
.await;
Expand Down Expand Up @@ -1676,19 +1677,19 @@ async fn adjust_required_routing_and_propagate(
for (peer, assignments_packet) in peer_assignments {
ctx.send_message(NetworkBridgeMessage::SendValidationMessage(
vec![peer],
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Assignments(assignments_packet),
),
)),
))
.await;
}

for (peer, approvals_packet) in peer_approvals {
ctx.send_message(NetworkBridgeMessage::SendValidationMessage(
vec![peer],
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Approvals(approvals_packet),
),
)),
))
.await;
}
Expand Down Expand Up @@ -1780,7 +1781,7 @@ impl ApprovalDistribution {
{
match msg {
ApprovalDistributionMessage::NetworkBridgeUpdate(event) => {
state.handle_network_msg(ctx, metrics, event).await;
state.handle_network_msg(ctx, metrics, event, rng).await;
},
ApprovalDistributionMessage::NewBlocks(metas) => {
state.handle_new_blocks(ctx, metrics, metas, rng).await;
Expand Down
86 changes: 43 additions & 43 deletions node/network/approval-distribution/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ async fn setup_gossip_topology(
) {
overseer_send(
virtual_overseer,
ApprovalDistributionMessage::NetworkBridgeUpdateV1(NetworkBridgeEvent::NewGossipTopology(
ApprovalDistributionMessage::NetworkBridgeUpdate(NetworkBridgeEvent::NewGossipTopology(
gossip_topology,
)),
)
Expand Down Expand Up @@ -1202,9 +1202,9 @@ fn propagates_locally_generated_assignment_to_both_dimensions() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Assignments(sent_assignments)
)
))
)) => {
assert_eq!(sent_peers.len(), expected_indices.len() + 4);
for &i in &expected_indices {
Expand All @@ -1223,9 +1223,9 @@ fn propagates_locally_generated_assignment_to_both_dimensions() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Approvals(sent_approvals)
)
))
)) => {
// Random sampling is reused from the assignment.
assert_eq!(sent_peers, assignment_sent_peers);
Expand Down Expand Up @@ -1306,9 +1306,9 @@ fn propagates_assignments_along_unshared_dimension() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Assignments(sent_assignments)
)
))
)) => {
assert_eq!(sent_peers.len(), expected_y.len() + 4);
for &i in &expected_y {
Expand Down Expand Up @@ -1355,9 +1355,9 @@ fn propagates_assignments_along_unshared_dimension() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Assignments(sent_assignments)
)
))
)) => {
assert_eq!(sent_peers.len(), expected_x.len() + 4);
for &i in &expected_x {
Expand Down Expand Up @@ -1450,9 +1450,9 @@ fn propagates_to_required_after_connect() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Assignments(sent_assignments)
)
))
)) => {
assert_eq!(sent_peers.len(), expected_indices.len() + 4);
for &i in &expected_indices {
Expand All @@ -1471,9 +1471,9 @@ fn propagates_to_required_after_connect() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Approvals(sent_approvals)
)
))
)) => {
// Random sampling is reused from the assignment.
assert_eq!(sent_peers, assignment_sent_peers);
Expand All @@ -1488,9 +1488,9 @@ fn propagates_to_required_after_connect() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Assignments(sent_assignments)
)
))
)) => {
assert_eq!(sent_peers.len(), 1);
assert_eq!(&sent_peers[0], &peers[i].0);
Expand All @@ -1502,9 +1502,9 @@ fn propagates_to_required_after_connect() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Approvals(sent_approvals)
)
))
)) => {
assert_eq!(sent_peers.len(), 1);
assert_eq!(&sent_peers[0], &peers[i].0);
Expand Down Expand Up @@ -1576,9 +1576,9 @@ fn sends_to_more_peers_after_getting_topology() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Assignments(sent_assignments)
)
))
)) => {
// Only sends to random peers.
assert_eq!(sent_peers.len(), 4);
Expand All @@ -1598,9 +1598,9 @@ fn sends_to_more_peers_after_getting_topology() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Approvals(sent_approvals)
)
))
)) => {
// Random sampling is reused from the assignment.
assert_eq!(sent_peers, assignment_sent_peers);
Expand All @@ -1623,9 +1623,9 @@ fn sends_to_more_peers_after_getting_topology() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Assignments(sent_assignments)
)
))
)) => {
// Sends to all expected peers.
assert_eq!(sent_peers.len(), 1);
Expand All @@ -1644,9 +1644,9 @@ fn sends_to_more_peers_after_getting_topology() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Approvals(sent_approvals)
)
))
)) => {
// Sends to all expected peers.
assert_eq!(sent_peers.len(), 1);
Expand Down Expand Up @@ -1734,9 +1734,9 @@ fn originator_aggression_l1() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Assignments(_)
)
))
)) => {
sent_peers.into_iter()
.filter_map(|sp| peers.iter().position(|p| &p.0 == &sp))
Expand All @@ -1748,9 +1748,9 @@ fn originator_aggression_l1() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
_,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Approvals(_)
)
))
)) => { }
);

Expand Down Expand Up @@ -1784,9 +1784,9 @@ fn originator_aggression_l1() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Assignments(sent_assignments)
)
))
)) => {
// Sends to all expected peers.
assert_eq!(sent_peers.len(), 1);
Expand All @@ -1804,9 +1804,9 @@ fn originator_aggression_l1() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Approvals(sent_approvals)
)
))
)) => {
// Sends to all expected peers.
assert_eq!(sent_peers.len(), 1);
Expand Down Expand Up @@ -1893,9 +1893,9 @@ fn non_originator_aggression_l1() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
_,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Assignments(_)
)
))
)) => { }
);

Expand Down Expand Up @@ -1998,9 +1998,9 @@ fn non_originator_aggression_l2() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Assignments(_)
)
))
)) => {
sent_peers.into_iter()
.filter_map(|sp| peers.iter().position(|p| &p.0 == &sp))
Expand Down Expand Up @@ -2068,9 +2068,9 @@ fn non_originator_aggression_l2() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Assignments(sent_assignments)
)
))
)) => {
// Sends to all expected peers.
assert_eq!(sent_peers.len(), 1);
Expand Down Expand Up @@ -2159,9 +2159,9 @@ fn resends_messages_periodically() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Assignments(sent_assignments)
)
))
)) => {
assert_eq!(sent_peers.len(), expected_y.len() + 4);
for &i in &expected_y {
Expand Down Expand Up @@ -2208,9 +2208,9 @@ fn resends_messages_periodically() {
overseer_recv(overseer).await,
AllMessages::NetworkBridge(NetworkBridgeMessage::SendValidationMessage(
sent_peers,
protocol_v1::ValidationProtocol::ApprovalDistribution(
Versioned::V1(protocol_v1::ValidationProtocol::ApprovalDistribution(
protocol_v1::ApprovalDistributionMessage::Assignments(sent_assignments)
)
))
)) => {
assert_eq!(sent_peers.len(), 1);
let expected_pos = expected_y.iter()
Expand Down
2 changes: 1 addition & 1 deletion node/network/gossip-support/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,7 @@ where
},
NetworkBridgeEvent::OurViewChange(_) => {},
NetworkBridgeEvent::PeerViewChange(_, _) => {},
NetworkBridgeEvent::NewGossipTopology(_) => {},
NetworkBridgeEvent::NewGossipTopology { .. } => {},
NetworkBridgeEvent::PeerMessage(_, Versioned::V1(v)) => {
match v {};
},
Expand Down
2 changes: 1 addition & 1 deletion node/network/statement-distribution/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2025,7 +2025,7 @@ fn handle_multiple_seconded_statements() {
.send(FromOverseer::Communication {
msg: StatementDistributionMessage::NetworkBridgeUpdate(
NetworkBridgeEvent::NewGossipTopology(
lucky_peers.iter().cloned().collect::<HashSet<_>>(),
gossip_topology,
),
),
})
Expand Down
23 changes: 22 additions & 1 deletion node/subsystem-types/src/messages/network_bridge_event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,28 @@ use std::{
pub use sc_network::{PeerId, ReputationChange};

use polkadot_node_network_protocol::{ObservedRole, OurView, ProtocolVersion, View, WrongVariant};
use polkadot_primitives::v2::AuthorityDiscoveryId;
use polkadot_primitives::v2::{AuthorityDiscoveryId, SessionIndex, ValidatorIndex};

/// Information about a peer in the gossip topology for a session.
#[derive(Debug, Clone, PartialEq)]
pub struct TopologyPeerInfo {
/// The validator's known peer IDs.
pub peer_ids: Vec<PeerId>,
/// The index of the validator in the discovery keys of the corresponding
/// `SessionInfo`. This can extend _beyond_ the set of active parachain validators.
pub validator_index: ValidatorIndex,
}

/// A struct indicating new gossip topology.
#[derive(Debug, Clone, PartialEq)]
pub struct NewGossipTopology {
/// The session index this topology corresponds to.
pub session: SessionIndex,
/// Neighbors in the 'X' dimension of the grid.
pub our_neighbors_x: HashMap<AuthorityDiscoveryId, TopologyPeerInfo>,
/// Neighbors in the 'Y' dimension of the grid.
pub our_neighbors_y: HashMap<AuthorityDiscoveryId, TopologyPeerInfo>,
}

/// Events from network.
#[derive(Debug, Clone, PartialEq)]
Expand Down
You are viewing a condensed version of this merge commit. You can view the full changes here.