mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 19:21:13 +00:00
Use grid topology for bitfileds distribution messages (#5389)
* Move NewGossipTopology -> SessionGridTopology outside as this implementation is shared * Add method to return peers difference between topologies * Implement basic grid topology usage for the bitfield distribution * Fix tests * Oops, fix tests * Add some tests for random routing * Add a unit test for topology distribution * Store the current and the previous topology to match sessions boundaries * Update tests * Update node/network/bitfield-distribution/src/lib.rs Co-authored-by: Andronik <write@reusable.software> * Update node/network/protocol/src/grid_topology.rs Co-authored-by: Andronik <write@reusable.software> * Update node/network/bitfield-distribution/src/lib.rs Co-authored-by: Andronik <write@reusable.software> * Add some debug * Fix tests as HashSet order is undefined Co-authored-by: Andronik <write@reusable.software>
This commit is contained in:
@@ -31,8 +31,8 @@ use polkadot_node_primitives::approval::{
|
||||
};
|
||||
use polkadot_node_subsystem::{
|
||||
messages::{
|
||||
network_bridge_event, ApprovalCheckResult, ApprovalDistributionMessage,
|
||||
ApprovalVotingMessage, AssignmentCheckResult, NetworkBridgeEvent, NetworkBridgeMessage,
|
||||
ApprovalCheckResult, ApprovalDistributionMessage, ApprovalVotingMessage,
|
||||
AssignmentCheckResult, NetworkBridgeEvent, NetworkBridgeMessage,
|
||||
},
|
||||
overseer, ActiveLeavesUpdate, FromOverseer, OverseerSignal, SpawnedSubsystem, SubsystemContext,
|
||||
SubsystemError,
|
||||
@@ -145,29 +145,6 @@ impl Default for AggressionConfig {
|
||||
}
|
||||
}
|
||||
|
||||
struct ApprovalGridTopology(SessionGridTopology);
|
||||
|
||||
impl From<network_bridge_event::NewGossipTopology> for ApprovalGridTopology {
|
||||
fn from(topology: network_bridge_event::NewGossipTopology) -> Self {
|
||||
let peers_x =
|
||||
topology.our_neighbors_x.values().flat_map(|p| &p.peer_ids).cloned().collect();
|
||||
let peers_y =
|
||||
topology.our_neighbors_y.values().flat_map(|p| &p.peer_ids).cloned().collect();
|
||||
|
||||
let validator_indices_x =
|
||||
topology.our_neighbors_x.values().map(|p| p.validator_index.clone()).collect();
|
||||
let validator_indices_y =
|
||||
topology.our_neighbors_y.values().map(|p| p.validator_index.clone()).collect();
|
||||
|
||||
ApprovalGridTopology(SessionGridTopology {
|
||||
peers_x,
|
||||
peers_y,
|
||||
validator_indices_x,
|
||||
validator_indices_y,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(PartialEq)]
|
||||
enum Resend {
|
||||
Yes,
|
||||
@@ -368,12 +345,8 @@ impl State {
|
||||
},
|
||||
NetworkBridgeEvent::NewGossipTopology(topology) => {
|
||||
let session = topology.session;
|
||||
self.handle_new_session_topology(
|
||||
ctx,
|
||||
session,
|
||||
ApprovalGridTopology::from(topology),
|
||||
)
|
||||
.await;
|
||||
self.handle_new_session_topology(ctx, session, SessionGridTopology::from(topology))
|
||||
.await;
|
||||
},
|
||||
NetworkBridgeEvent::PeerViewChange(peer_id, view) => {
|
||||
self.handle_peer_view_change(ctx, metrics, peer_id, view, rng).await;
|
||||
@@ -528,9 +501,9 @@ impl State {
|
||||
ctx: &mut (impl SubsystemContext<Message = ApprovalDistributionMessage>
|
||||
+ overseer::SubsystemContext<Message = ApprovalDistributionMessage>),
|
||||
session: SessionIndex,
|
||||
topology: ApprovalGridTopology,
|
||||
topology: SessionGridTopology,
|
||||
) {
|
||||
self.topologies.insert_topology(session, topology.0);
|
||||
self.topologies.insert_topology(session, topology);
|
||||
let topology = self.topologies.get_topology(session).expect("just inserted above; qed");
|
||||
|
||||
adjust_required_routing_and_propagate(
|
||||
|
||||
@@ -21,7 +21,7 @@ use polkadot_node_network_protocol::{our_view, view, ObservedRole};
|
||||
use polkadot_node_primitives::approval::{
|
||||
AssignmentCertKind, VRFOutput, VRFProof, RELAY_VRF_MODULO_CONTEXT,
|
||||
};
|
||||
use polkadot_node_subsystem::messages::{AllMessages, ApprovalCheckError};
|
||||
use polkadot_node_subsystem::messages::{network_bridge_event, AllMessages, ApprovalCheckError};
|
||||
use polkadot_node_subsystem_test_helpers as test_helpers;
|
||||
use polkadot_node_subsystem_util::TimeoutExt as _;
|
||||
use polkadot_primitives::v2::{AuthorityDiscoveryId, BlakeTwo256, HashT};
|
||||
|
||||
Reference in New Issue
Block a user