mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 04:07:57 +00:00
Use async/await instead of manual polling of NetworkWorker (#13219)
* Convert `NetworkWorker::poll()` into async `next_action()` * Use `NetworkWorker::next_action` instead of `poll` in `sc-network-test` * Revert "Use `NetworkWorker::next_action` instead of `poll` in `sc-network-test`" This reverts commit 4b5d851ec864f78f9d083a18a618fbe117c896d2. * Fix `sc-network-test` to poll `NetworkWorker::next_action` * Fix `sc_network::service` tests to poll `NetworkWorker::next_action` * Fix docs * kick CI * Factor out `next_worker_message()` & `next_swarm_event()` * Error handling: replace `futures::pending!()` with `expect()` * Simplify stream polling in `select!` * Replace `NetworkWorker::next_action()` with `run()` * Apply suggestions from code review Co-authored-by: Bastian Köcher <git@kchr.de> * minor: comment * Apply suggestions from code review Co-authored-by: Bastian Köcher <git@kchr.de> * Print debug log when network future is shut down * Evaluate `NetworkWorker::run()` future once before the loop * Fix client code to match new `NetworkService` interfaces * Make clippy happy * Apply suggestions from code review Co-authored-by: Bastian Köcher <git@kchr.de> * Apply suggestions from code review Co-authored-by: Bastian Köcher <git@kchr.de> * Revert "Apply suggestions from code review" This reverts commit 9fa646d0ed613e5f8623d3d37d1d59ec0a535850. * Make `NetworkWorker::run()` consume `self` * Terminate system RPC future if RPC rx stream has terminated. * Rewrite with let-else * Fix comments * Get `best_seen_block` and call `on_block_finalized` via `ChainSync` instead of `NetworkService` * rustfmt * make clippy happy * Tests: schedule wake if `next_action()` returned true * minor: comment * minor: fix `NetworkWorker` rustdoc * minor: amend the rustdoc * Fix bug that caused `on_demand_beefy_justification_sync` test to hang * rustfmt * Apply review suggestions --------- Co-authored-by: Bastian Köcher <git@kchr.de>
This commit is contained in:
@@ -31,7 +31,7 @@ use std::{
|
||||
time::Duration,
|
||||
};
|
||||
|
||||
use futures::{channel::oneshot, future::BoxFuture, prelude::*};
|
||||
use futures::{channel::oneshot, future::BoxFuture, pin_mut, prelude::*};
|
||||
use libp2p::{build_multiaddr, PeerId};
|
||||
use log::trace;
|
||||
use parking_lot::Mutex;
|
||||
@@ -83,7 +83,7 @@ use sp_runtime::{
|
||||
};
|
||||
use substrate_test_runtime_client::AccountKeyring;
|
||||
pub use substrate_test_runtime_client::{
|
||||
runtime::{Block, Extrinsic, Hash, Transfer},
|
||||
runtime::{Block, Extrinsic, Hash, Header, Transfer},
|
||||
TestClient, TestClientBuilder, TestClientBuilderExt,
|
||||
};
|
||||
use tokio::time::timeout;
|
||||
@@ -1078,8 +1078,17 @@ where
|
||||
self.mut_peers(|peers| {
|
||||
for (i, peer) in peers.iter_mut().enumerate() {
|
||||
trace!(target: "sync", "-- Polling {}: {}", i, peer.id());
|
||||
if let Poll::Ready(()) = peer.network.poll_unpin(cx) {
|
||||
panic!("NetworkWorker has terminated unexpectedly.")
|
||||
loop {
|
||||
// The code below is not quite correct, because we are polling a different
|
||||
// instance of the future every time. But as long as
|
||||
// `NetworkWorker::next_action()` contains just streams polling not interleaved
|
||||
// with other `.await`s, dropping the future and recreating it works the same as
|
||||
// polling a single instance.
|
||||
let net_poll_future = peer.network.next_action();
|
||||
pin_mut!(net_poll_future);
|
||||
if let Poll::Pending = net_poll_future.poll(cx) {
|
||||
break
|
||||
}
|
||||
}
|
||||
trace!(target: "sync", "-- Polling complete {}: {}", i, peer.id());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user