mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-09 21:21:11 +00:00
Remove support for multiple network protocols (#2005)
* Remove support multiple network protocols * Address concerns * Add back debug_asserts
This commit is contained in:
@@ -532,7 +532,7 @@ pub mod tests {
|
||||
RemoteCallRequest, RemoteReadRequest, RemoteChangesRequest, ChangesProof};
|
||||
use crate::config::Roles;
|
||||
use crate::message;
|
||||
use network_libp2p::{NodeIndex, ProtocolId, Severity};
|
||||
use network_libp2p::{NodeIndex, Severity};
|
||||
use crate::service::{network_channel, NetworkPort, NetworkMsg};
|
||||
use super::{REQUEST_TIMEOUT, OnDemand, OnDemandService};
|
||||
use test_client::runtime::{changes_trie_config, Block, Header};
|
||||
@@ -644,7 +644,7 @@ pub mod tests {
|
||||
#[test]
|
||||
fn disconnects_from_timeouted_peer() {
|
||||
let (_x, on_demand) = dummy(true);
|
||||
let (network_sender, network_port) = network_channel(ProtocolId::default());
|
||||
let (network_sender, network_port) = network_channel();
|
||||
on_demand.set_network_sender(network_sender.clone());
|
||||
on_demand.on_connect(0, Roles::FULL, 1000);
|
||||
on_demand.on_connect(1, Roles::FULL, 1000);
|
||||
@@ -671,7 +671,7 @@ pub mod tests {
|
||||
#[test]
|
||||
fn disconnects_from_peer_on_response_with_wrong_id() {
|
||||
let (_x, on_demand) = dummy(true);
|
||||
let (network_sender, network_port) = network_channel(ProtocolId::default());
|
||||
let (network_sender, network_port) = network_channel();
|
||||
on_demand.set_network_sender(network_sender.clone());
|
||||
on_demand.on_connect(0, Roles::FULL, 1000);
|
||||
|
||||
@@ -690,7 +690,7 @@ pub mod tests {
|
||||
#[test]
|
||||
fn disconnects_from_peer_on_incorrect_response() {
|
||||
let (_x, on_demand) = dummy(false);
|
||||
let (network_sender, network_port) = network_channel(ProtocolId::default());
|
||||
let (network_sender, network_port) = network_channel();
|
||||
on_demand.set_network_sender(network_sender.clone());
|
||||
on_demand.remote_call(RemoteCallRequest {
|
||||
block: Default::default(),
|
||||
@@ -709,7 +709,7 @@ pub mod tests {
|
||||
#[test]
|
||||
fn disconnects_from_peer_on_unexpected_response() {
|
||||
let (_x, on_demand) = dummy(true);
|
||||
let (network_sender, network_port) = network_channel(ProtocolId::default());
|
||||
let (network_sender, network_port) = network_channel();
|
||||
on_demand.set_network_sender(network_sender.clone());
|
||||
on_demand.on_connect(0, Roles::FULL, 1000);
|
||||
|
||||
@@ -720,7 +720,7 @@ pub mod tests {
|
||||
#[test]
|
||||
fn disconnects_from_peer_on_wrong_response_type() {
|
||||
let (_x, on_demand) = dummy(false);
|
||||
let (network_sender, network_port) = network_channel(ProtocolId::default());
|
||||
let (network_sender, network_port) = network_channel();
|
||||
on_demand.set_network_sender(network_sender.clone());
|
||||
on_demand.on_connect(0, Roles::FULL, 1000);
|
||||
|
||||
@@ -746,7 +746,7 @@ pub mod tests {
|
||||
|
||||
let retry_count = 2;
|
||||
let (_x, on_demand) = dummy(false);
|
||||
let (network_sender, _network_port) = network_channel(ProtocolId::default());
|
||||
let (network_sender, _network_port) = network_channel();
|
||||
on_demand.set_network_sender(network_sender.clone());
|
||||
for i in 0..retry_count+1 {
|
||||
on_demand.on_connect(i, Roles::FULL, 1000);
|
||||
@@ -786,7 +786,7 @@ pub mod tests {
|
||||
#[test]
|
||||
fn receives_remote_call_response() {
|
||||
let (_x, on_demand) = dummy(true);
|
||||
let (network_sender, _network_port) = network_channel(ProtocolId::default());
|
||||
let (network_sender, _network_port) = network_channel();
|
||||
on_demand.set_network_sender(network_sender.clone());
|
||||
on_demand.on_connect(0, Roles::FULL, 1000);
|
||||
|
||||
@@ -809,7 +809,7 @@ pub mod tests {
|
||||
#[test]
|
||||
fn receives_remote_read_response() {
|
||||
let (_x, on_demand) = dummy(true);
|
||||
let (network_sender, _network_port) = network_channel(ProtocolId::default());
|
||||
let (network_sender, _network_port) = network_channel();
|
||||
on_demand.set_network_sender(network_sender.clone());
|
||||
on_demand.on_connect(0, Roles::FULL, 1000);
|
||||
|
||||
@@ -834,7 +834,7 @@ pub mod tests {
|
||||
#[test]
|
||||
fn receives_remote_header_response() {
|
||||
let (_x, on_demand) = dummy(true);
|
||||
let (network_sender, _network_port) = network_channel(ProtocolId::default());
|
||||
let (network_sender, _network_port) = network_channel();
|
||||
on_demand.set_network_sender(network_sender.clone());
|
||||
on_demand.on_connect(0, Roles::FULL, 1000);
|
||||
|
||||
@@ -869,7 +869,7 @@ pub mod tests {
|
||||
#[test]
|
||||
fn receives_remote_changes_response() {
|
||||
let (_x, on_demand) = dummy(true);
|
||||
let (network_sender, _network_port) = network_channel(ProtocolId::default());
|
||||
let (network_sender, _network_port) = network_channel();
|
||||
on_demand.set_network_sender(network_sender.clone());
|
||||
on_demand.on_connect(0, Roles::FULL, 1000);
|
||||
|
||||
@@ -900,7 +900,7 @@ pub mod tests {
|
||||
#[test]
|
||||
fn does_not_sends_request_to_peer_who_has_no_required_block() {
|
||||
let (_x, on_demand) = dummy(true);
|
||||
let (network_sender, _network_port) = network_channel(ProtocolId::default());
|
||||
let (network_sender, _network_port) = network_channel();
|
||||
on_demand.set_network_sender(network_sender.clone());
|
||||
|
||||
on_demand.on_connect(1, Roles::FULL, 100);
|
||||
@@ -952,7 +952,7 @@ pub mod tests {
|
||||
// loop forever after dispatching a request to the last peer, since the
|
||||
// last peer was not updated
|
||||
let (_x, on_demand) = dummy(true);
|
||||
let (network_sender, _network_port) = network_channel(ProtocolId::default());
|
||||
let (network_sender, _network_port) = network_channel();
|
||||
on_demand.set_network_sender(network_sender.clone());
|
||||
|
||||
on_demand.remote_header(RemoteHeaderRequest {
|
||||
@@ -977,7 +977,7 @@ pub mod tests {
|
||||
#[test]
|
||||
fn tries_to_send_all_pending_requests() {
|
||||
let (_x, on_demand) = dummy(true);
|
||||
let (network_sender, _network_port) = network_channel(ProtocolId::default());
|
||||
let (network_sender, _network_port) = network_channel();
|
||||
on_demand.set_network_sender(network_sender.clone());
|
||||
|
||||
on_demand.remote_header(RemoteHeaderRequest {
|
||||
|
||||
@@ -153,7 +153,7 @@ impl<B: BlockT + 'static, S: NetworkSpecialization<B>> Service<B, S> {
|
||||
protocol_id: ProtocolId,
|
||||
import_queue: Box<ImportQueue<B>>,
|
||||
) -> Result<(Arc<Service<B, S>>, NetworkChan<B>), Error> {
|
||||
let (network_chan, network_port) = network_channel(protocol_id);
|
||||
let (network_chan, network_port) = network_channel();
|
||||
let status_sinks = Arc::new(Mutex::new(Vec::new()));
|
||||
// Start in off-line mode, since we're not connected to any nodes yet.
|
||||
let is_offline = Arc::new(AtomicBool::new(true));
|
||||
@@ -370,10 +370,10 @@ impl<B: BlockT + 'static, S: NetworkSpecialization<B>> ManageNetwork for Service
|
||||
|
||||
|
||||
/// Create a NetworkPort/Chan pair.
|
||||
pub fn network_channel<B: BlockT + 'static>(protocol_id: ProtocolId) -> (NetworkChan<B>, NetworkPort<B>) {
|
||||
pub fn network_channel<B: BlockT + 'static>() -> (NetworkChan<B>, NetworkPort<B>) {
|
||||
let (network_sender, network_receiver) = channel::unbounded();
|
||||
let task_notify = Arc::new(AtomicTask::new());
|
||||
let network_port = NetworkPort::new(network_receiver, protocol_id, task_notify.clone());
|
||||
let network_port = NetworkPort::new(network_receiver, task_notify.clone());
|
||||
let network_chan = NetworkChan::new(network_sender, task_notify);
|
||||
(network_chan, network_port)
|
||||
}
|
||||
@@ -413,26 +413,24 @@ impl<B: BlockT + 'static> Drop for NetworkChan<B> {
|
||||
/// A receiver of NetworkMsg that makes the protocol-id available with each message.
|
||||
pub struct NetworkPort<B: BlockT + 'static> {
|
||||
receiver: Receiver<NetworkMsg<B>>,
|
||||
protocol_id: ProtocolId,
|
||||
task_notify: Arc<AtomicTask>,
|
||||
}
|
||||
|
||||
impl<B: BlockT + 'static> NetworkPort<B> {
|
||||
/// Create a new network port for a given protocol-id.
|
||||
pub fn new(receiver: Receiver<NetworkMsg<B>>, protocol_id: ProtocolId, task_notify: Arc<AtomicTask>) -> Self {
|
||||
pub fn new(receiver: Receiver<NetworkMsg<B>>, task_notify: Arc<AtomicTask>) -> Self {
|
||||
Self {
|
||||
receiver,
|
||||
protocol_id,
|
||||
task_notify,
|
||||
}
|
||||
}
|
||||
|
||||
/// Receive a message, if any is currently-enqueued.
|
||||
/// Register the current tokio task for notification when a new message is available.
|
||||
pub fn take_one_message(&self) -> Result<Option<(ProtocolId, NetworkMsg<B>)>, ()> {
|
||||
pub fn take_one_message(&self) -> Result<Option<NetworkMsg<B>>, ()> {
|
||||
self.task_notify.register();
|
||||
match self.receiver.try_recv() {
|
||||
Ok(msg) => Ok(Some((self.protocol_id.clone(), msg))),
|
||||
Ok(msg) => Ok(Some(msg)),
|
||||
Err(TryRecvError::Empty) => Ok(None),
|
||||
Err(TryRecvError::Disconnected) => Err(()),
|
||||
}
|
||||
@@ -463,10 +461,8 @@ fn start_thread<B: BlockT + 'static>(
|
||||
config: NetworkConfiguration,
|
||||
registered: RegisteredProtocol<Message<B>>,
|
||||
) -> Result<((oneshot::Sender<()>, thread::JoinHandle<()>), Arc<Mutex<NetworkService<Message<B>>>>), Error> {
|
||||
let protocol_id = registered.id();
|
||||
|
||||
// Start the main service.
|
||||
let service = match start_service(config, Some(registered)) {
|
||||
let service = match start_service(config, registered) {
|
||||
Ok(service) => Arc::new(Mutex::new(service)),
|
||||
Err(err) => {
|
||||
warn!("Error starting network: {}", err);
|
||||
@@ -478,7 +474,7 @@ fn start_thread<B: BlockT + 'static>(
|
||||
let service_clone = service.clone();
|
||||
let mut runtime = RuntimeBuilder::new().name_prefix("libp2p-").build()?;
|
||||
let thread = thread::Builder::new().name("network".to_string()).spawn(move || {
|
||||
let fut = run_thread(protocol_sender, service_clone, network_port, protocol_id)
|
||||
let fut = run_thread(protocol_sender, service_clone, network_port)
|
||||
.select(close_rx.then(|_| Ok(())))
|
||||
.map(|(val, _)| val)
|
||||
.map_err(|(err,_ )| err);
|
||||
@@ -499,7 +495,6 @@ fn run_thread<B: BlockT + 'static>(
|
||||
protocol_sender: Sender<FromNetworkMsg<B>>,
|
||||
network_service: Arc<Mutex<NetworkService<Message<B>>>>,
|
||||
network_port: NetworkPort<B>,
|
||||
protocol_id: ProtocolId,
|
||||
) -> impl Future<Item = (), Error = io::Error> {
|
||||
|
||||
let network_service_2 = network_service.clone();
|
||||
@@ -511,7 +506,7 @@ fn run_thread<B: BlockT + 'static>(
|
||||
Ok(None) => Ok(Async::NotReady),
|
||||
Err(_) => Err(())
|
||||
}
|
||||
}).for_each(move |(protocol_id, msg)| {
|
||||
}).for_each(move |msg| {
|
||||
// Handle message from Protocol.
|
||||
match msg {
|
||||
NetworkMsg::PeerIds(node_idxs, sender) => {
|
||||
@@ -523,7 +518,7 @@ fn run_thread<B: BlockT + 'static>(
|
||||
NetworkMsg::Outgoing(who, outgoing_message) => {
|
||||
network_service_2
|
||||
.lock()
|
||||
.send_custom_message(who, protocol_id, outgoing_message);
|
||||
.send_custom_message(who, outgoing_message);
|
||||
},
|
||||
NetworkMsg::ReportPeer(who, severity) => {
|
||||
match severity {
|
||||
@@ -555,13 +550,6 @@ fn run_thread<B: BlockT + 'static>(
|
||||
// The network service produces events about what happens on the network. Let's process them.
|
||||
let network = stream::poll_fn(move || network_service.lock().poll()).for_each(move |event| {
|
||||
match event {
|
||||
NetworkServiceEvent::ClosedCustomProtocols { node_index, protocols, debug_info } => {
|
||||
if !protocols.is_empty() {
|
||||
debug_assert_eq!(protocols, &[protocol_id]);
|
||||
let _ = protocol_sender.send(
|
||||
FromNetworkMsg::PeerDisconnected(node_index, debug_info));
|
||||
}
|
||||
}
|
||||
NetworkServiceEvent::OpenedCustomProtocol { peer_id, node_index, version, debug_info, .. } => {
|
||||
debug_assert_eq!(version, protocol::CURRENT_VERSION as u8);
|
||||
let _ = protocol_sender.send(FromNetworkMsg::PeerConnected(peer_id, node_index, debug_info));
|
||||
|
||||
@@ -40,7 +40,7 @@ use crossbeam_channel::{self as channel, Sender, select};
|
||||
use futures::Future;
|
||||
use futures::sync::{mpsc, oneshot};
|
||||
use crate::message::{Message, ConsensusEngineId};
|
||||
use network_libp2p::{NodeIndex, ProtocolId, PeerId};
|
||||
use network_libp2p::{NodeIndex, PeerId};
|
||||
use parity_codec::Encode;
|
||||
use parking_lot::{Mutex, RwLock};
|
||||
use primitives::{H256, ed25519::Public as AuthorityId};
|
||||
@@ -554,7 +554,7 @@ pub trait TestNetFactory: Sized {
|
||||
let tx_pool = Arc::new(EmptyTransactionPool);
|
||||
let verifier = self.make_verifier(client.clone(), config);
|
||||
let (block_import, justification_import, data) = self.make_block_import(client.clone());
|
||||
let (network_sender, network_port) = network_channel(ProtocolId::default());
|
||||
let (network_sender, network_port) = network_channel();
|
||||
|
||||
let import_queue = Box::new(BasicQueue::new(verifier, block_import, justification_import));
|
||||
let status_sinks = Arc::new(Mutex::new(Vec::new()));
|
||||
|
||||
Reference in New Issue
Block a user