mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 01:11:10 +00:00
Make candidate validation bounded again (#2125)
This PR aims to channel the backpressure of the PVF host's preparation and execution queues to the candidate validation subsystem consumers. Related: #708
This commit is contained in:
@@ -22,7 +22,7 @@
|
||||
|
||||
use polkadot_node_subsystem::*;
|
||||
pub use polkadot_node_subsystem::{messages::*, overseer, FromOrchestra};
|
||||
use std::{future::Future, pin::Pin};
|
||||
use std::{collections::VecDeque, future::Future, pin::Pin};
|
||||
|
||||
/// Filter incoming and outgoing messages.
|
||||
pub trait MessageInterceptor<Sender>: Send + Sync + Clone + 'static
|
||||
@@ -170,6 +170,7 @@ where
|
||||
inner: Context,
|
||||
message_filter: Fil,
|
||||
sender: InterceptedSender<<Context as overseer::SubsystemContext>::Sender, Fil>,
|
||||
message_buffer: VecDeque<FromOrchestra<<Context as overseer::SubsystemContext>::Message>>,
|
||||
}
|
||||
|
||||
impl<Context, Fil> InterceptedContext<Context, Fil>
|
||||
@@ -189,7 +190,7 @@ where
|
||||
inner: inner.sender().clone(),
|
||||
message_filter: message_filter.clone(),
|
||||
};
|
||||
Self { inner, message_filter, sender }
|
||||
Self { inner, message_filter, sender, message_buffer: VecDeque::new() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -233,6 +234,9 @@ where
|
||||
}
|
||||
|
||||
async fn recv(&mut self) -> SubsystemResult<FromOrchestra<Self::Message>> {
|
||||
if let Some(msg) = self.message_buffer.pop_front() {
|
||||
return Ok(msg)
|
||||
}
|
||||
loop {
|
||||
let msg = self.inner.recv().await?;
|
||||
if let Some(msg) = self.message_filter.intercept_incoming(self.inner.sender(), msg) {
|
||||
@@ -241,6 +245,19 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
async fn recv_signal(&mut self) -> SubsystemResult<Self::Signal> {
|
||||
loop {
|
||||
let msg = self.inner.recv().await?;
|
||||
if let Some(msg) = self.message_filter.intercept_incoming(self.inner.sender(), msg) {
|
||||
if let FromOrchestra::Signal(sig) = msg {
|
||||
return Ok(sig)
|
||||
} else {
|
||||
self.message_buffer.push_back(msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn spawn(
|
||||
&mut self,
|
||||
name: &'static str,
|
||||
|
||||
Reference in New Issue
Block a user