Distribute the network future polling time more evenly (#6903)

* Distribute the network future polling time more evenly

* Update client/network/src/service.rs
This commit is contained in:
Pierre Krieger
2020-08-19 13:45:30 +02:00
committed by GitHub
parent f58e950415
commit 52e55daeef
+24
View File
@@ -1405,7 +1405,22 @@ impl<B: BlockT + 'static, H: ExHashT> Future for NetworkWorker<B, H> {
}
}
// At the time of writing of this comment, due to a high volume of messages, the network
// worker sometimes takes a long time to process the loop below. When that happens, the
// rest of the polling is frozen. In order to avoid negative side-effects caused by this
// freeze, a limit to the number of iterations is enforced below. If the limit is reached,
// the task is interrupted then scheduled again.
//
// This allows for a more even distribution in the time taken by each sub-part of the
// polling.
let mut num_iterations = 0;
loop {
num_iterations += 1;
if num_iterations >= 100 {
cx.waker().wake_by_ref();
break;
}
// Process the next message coming from the `NetworkService`.
let msg = match this.from_service.poll_next_unpin(cx) {
Poll::Ready(Some(msg)) => msg,
@@ -1445,7 +1460,16 @@ impl<B: BlockT + 'static, H: ExHashT> Future for NetworkWorker<B, H> {
}
}
// `num_iterations` serves the same purpose as in the previous loop.
// See the previous loop for explanations.
let mut num_iterations = 0;
loop {
num_iterations += 1;
if num_iterations >= 1000 {
cx.waker().wake_by_ref();
break;
}
// Process the next action coming from the network.
let next_event = this.network_service.next_event();
futures::pin_mut!(next_event);