mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 12:51:05 +00:00
overseer: send_msg should not return an error (#1995)
* send_message should not return an error * Apply suggestions from code review Co-authored-by: Peter Goodspeed-Niklaus <coriolinus@users.noreply.github.com> * s/send_logging_error/send_and_log_error Co-authored-by: Peter Goodspeed-Niklaus <coriolinus@users.noreply.github.com>
This commit is contained in:
@@ -193,20 +193,20 @@ pub struct OverseerHandler {
|
||||
impl OverseerHandler {
|
||||
/// Inform the `Overseer` that that some block was imported.
|
||||
#[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))]
|
||||
pub async fn block_imported(&mut self, block: BlockInfo) -> SubsystemResult<()> {
|
||||
self.events_tx.send(Event::BlockImported(block)).await.map_err(Into::into)
|
||||
pub async fn block_imported(&mut self, block: BlockInfo) {
|
||||
self.send_and_log_error(Event::BlockImported(block)).await
|
||||
}
|
||||
|
||||
/// Send some message to one of the `Subsystem`s.
|
||||
#[tracing::instrument(level = "trace", skip(self, msg), fields(subsystem = LOG_TARGET))]
|
||||
pub async fn send_msg(&mut self, msg: impl Into<AllMessages>) -> SubsystemResult<()> {
|
||||
self.events_tx.send(Event::MsgToSubsystem(msg.into())).await.map_err(Into::into)
|
||||
pub async fn send_msg(&mut self, msg: impl Into<AllMessages>) {
|
||||
self.send_and_log_error(Event::MsgToSubsystem(msg.into())).await
|
||||
}
|
||||
|
||||
/// Inform the `Overseer` that that some block was finalized.
|
||||
#[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))]
|
||||
pub async fn block_finalized(&mut self, block: BlockInfo) -> SubsystemResult<()> {
|
||||
self.events_tx.send(Event::BlockFinalized(block)).await.map_err(Into::into)
|
||||
pub async fn block_finalized(&mut self, block: BlockInfo) {
|
||||
self.send_and_log_error(Event::BlockFinalized(block)).await
|
||||
}
|
||||
|
||||
/// Wait for a block with the given hash to be in the active-leaves set.
|
||||
@@ -217,17 +217,23 @@ impl OverseerHandler {
|
||||
/// the response channel may never return if the hash was deactivated before this call.
|
||||
/// In this case, it's the caller's responsibility to ensure a timeout is set.
|
||||
#[tracing::instrument(level = "trace", skip(self, response_channel), fields(subsystem = LOG_TARGET))]
|
||||
pub async fn wait_for_activation(&mut self, hash: Hash, response_channel: oneshot::Sender<SubsystemResult<()>>) -> SubsystemResult<()> {
|
||||
self.events_tx.send(Event::ExternalRequest(ExternalRequest::WaitForActivation {
|
||||
pub async fn wait_for_activation(&mut self, hash: Hash, response_channel: oneshot::Sender<SubsystemResult<()>>) {
|
||||
self.send_and_log_error(Event::ExternalRequest(ExternalRequest::WaitForActivation {
|
||||
hash,
|
||||
response_channel
|
||||
})).await.map_err(Into::into)
|
||||
})).await
|
||||
}
|
||||
|
||||
/// Tell `Overseer` to shutdown.
|
||||
#[tracing::instrument(level = "trace", skip(self), fields(subsystem = LOG_TARGET))]
|
||||
pub async fn stop(&mut self) -> SubsystemResult<()> {
|
||||
self.events_tx.send(Event::Stop).await.map_err(Into::into)
|
||||
pub async fn stop(&mut self) {
|
||||
self.send_and_log_error(Event::Stop).await
|
||||
}
|
||||
|
||||
async fn send_and_log_error(&mut self, event: Event) {
|
||||
if self.events_tx.send(event).await.is_err() {
|
||||
tracing::info!(target: LOG_TARGET, "Failed to send an event to Overseer");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -239,7 +245,7 @@ impl OverseerHandler {
|
||||
pub async fn forward_events<P: BlockchainEvents<Block>>(
|
||||
client: Arc<P>,
|
||||
mut handler: OverseerHandler,
|
||||
) -> SubsystemResult<()> {
|
||||
) {
|
||||
let mut finality = client.finality_notification_stream();
|
||||
let mut imports = client.import_notification_stream();
|
||||
|
||||
@@ -248,7 +254,7 @@ pub async fn forward_events<P: BlockchainEvents<Block>>(
|
||||
f = finality.next() => {
|
||||
match f {
|
||||
Some(block) => {
|
||||
handler.block_finalized(block.into()).await?;
|
||||
handler.block_finalized(block.into()).await;
|
||||
}
|
||||
None => break,
|
||||
}
|
||||
@@ -256,7 +262,7 @@ pub async fn forward_events<P: BlockchainEvents<Block>>(
|
||||
i = imports.next() => {
|
||||
match i {
|
||||
Some(block) => {
|
||||
handler.block_imported(block.into()).await?;
|
||||
handler.block_imported(block.into()).await;
|
||||
}
|
||||
None => break,
|
||||
}
|
||||
@@ -264,8 +270,6 @@ pub async fn forward_events<P: BlockchainEvents<Block>>(
|
||||
complete => break,
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
impl Debug for ToOverseer {
|
||||
@@ -338,15 +342,34 @@ impl<M: Send + 'static> SubsystemContext for OverseerSubsystemContext<M> {
|
||||
}).await.map_err(Into::into)
|
||||
}
|
||||
|
||||
async fn send_message(&mut self, msg: AllMessages) -> SubsystemResult<()> {
|
||||
self.tx.send(ToOverseer::SubsystemMessage(msg)).await.map_err(Into::into)
|
||||
async fn send_message(&mut self, msg: AllMessages) {
|
||||
self.send_and_log_error(ToOverseer::SubsystemMessage(msg)).await
|
||||
}
|
||||
|
||||
async fn send_messages<T>(&mut self, msgs: T) -> SubsystemResult<()>
|
||||
async fn send_messages<T>(&mut self, msgs: T)
|
||||
where T: IntoIterator<Item = AllMessages> + Send, T::IntoIter: Send
|
||||
{
|
||||
let mut msgs = stream::iter(msgs.into_iter().map(ToOverseer::SubsystemMessage).map(Ok));
|
||||
self.tx.send_all(&mut msgs).await.map_err(Into::into)
|
||||
if self.tx.send_all(&mut msgs).await.is_err() {
|
||||
tracing::debug!(
|
||||
target: LOG_TARGET,
|
||||
msg_type = std::any::type_name::<M>(),
|
||||
"Failed to send messages to Overseer",
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<M> OverseerSubsystemContext<M> {
|
||||
async fn send_and_log_error(&mut self, msg: ToOverseer) {
|
||||
if self.tx.send(msg).await.is_err() {
|
||||
tracing::debug!(
|
||||
target: LOG_TARGET,
|
||||
msg_type = std::any::type_name::<M>(),
|
||||
"Failed to send a message to Overseer",
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1712,7 +1735,7 @@ mod tests {
|
||||
tx,
|
||||
)
|
||||
)
|
||||
).await.unwrap();
|
||||
).await;
|
||||
c += 1;
|
||||
continue;
|
||||
}
|
||||
@@ -1786,7 +1809,7 @@ mod tests {
|
||||
Some(msg) => {
|
||||
s1_results.push(msg);
|
||||
if s1_results.len() == 10 {
|
||||
handler.stop().await.unwrap();
|
||||
handler.stop().await;
|
||||
}
|
||||
}
|
||||
None => break,
|
||||
@@ -1844,10 +1867,10 @@ mod tests {
|
||||
|
||||
pin_mut!(overseer_fut);
|
||||
|
||||
handler.block_imported(second_block).await.unwrap();
|
||||
handler.block_imported(third_block).await.unwrap();
|
||||
handler.send_msg(AllMessages::CandidateValidation(test_candidate_validation_msg())).await.unwrap();
|
||||
handler.stop().await.unwrap();
|
||||
handler.block_imported(second_block).await;
|
||||
handler.block_imported(third_block).await;
|
||||
handler.send_msg(AllMessages::CandidateValidation(test_candidate_validation_msg())).await;
|
||||
handler.stop().await;
|
||||
|
||||
select! {
|
||||
res = overseer_fut => {
|
||||
@@ -2012,8 +2035,8 @@ mod tests {
|
||||
let mut ss5_results = Vec::new();
|
||||
let mut ss6_results = Vec::new();
|
||||
|
||||
handler.block_imported(second_block).await.unwrap();
|
||||
handler.block_imported(third_block).await.unwrap();
|
||||
handler.block_imported(second_block).await;
|
||||
handler.block_imported(third_block).await;
|
||||
|
||||
let expected_heartbeats = vec![
|
||||
OverseerSignal::ActiveLeaves(ActiveLeavesUpdate::start_work(first_block_hash)),
|
||||
@@ -2048,7 +2071,7 @@ mod tests {
|
||||
|
||||
if ss5_results.len() == expected_heartbeats.len() &&
|
||||
ss6_results.len() == expected_heartbeats.len() {
|
||||
handler.stop().await.unwrap();
|
||||
handler.stop().await;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2106,7 +2129,7 @@ mod tests {
|
||||
let mut ss6_results = Vec::new();
|
||||
|
||||
// this should stop work on both forks we started with earlier.
|
||||
handler.block_finalized(third_block).await.unwrap();
|
||||
handler.block_finalized(third_block).await;
|
||||
|
||||
let expected_heartbeats = vec![
|
||||
OverseerSignal::ActiveLeaves(ActiveLeavesUpdate {
|
||||
@@ -2141,7 +2164,7 @@ mod tests {
|
||||
|
||||
if ss5_results.len() == expected_heartbeats.len() &&
|
||||
ss6_results.len() == expected_heartbeats.len() {
|
||||
handler.stop().await.unwrap();
|
||||
handler.stop().await;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2343,28 +2366,28 @@ mod tests {
|
||||
hash: Default::default(),
|
||||
parent_hash: Default::default(),
|
||||
number: Default::default(),
|
||||
}).await.unwrap();
|
||||
}).await;
|
||||
|
||||
// send a msg to each subsystem
|
||||
// except for BitfieldSigning as the message is not instantiable
|
||||
handler.send_msg(AllMessages::CandidateValidation(test_candidate_validation_msg())).await.unwrap();
|
||||
handler.send_msg(AllMessages::CandidateBacking(test_candidate_backing_msg())).await.unwrap();
|
||||
handler.send_msg(AllMessages::CandidateSelection(test_candidate_selection_msg())).await.unwrap();
|
||||
handler.send_msg(AllMessages::CollationGeneration(test_collator_generation_msg())).await.unwrap();
|
||||
handler.send_msg(AllMessages::CollatorProtocol(test_collator_protocol_msg())).await.unwrap();
|
||||
handler.send_msg(AllMessages::StatementDistribution(test_statement_distribution_msg())).await.unwrap();
|
||||
handler.send_msg(AllMessages::AvailabilityDistribution(test_availability_distribution_msg())).await.unwrap();
|
||||
// handler.send_msg(AllMessages::BitfieldSigning(test_bitfield_signing_msg())).await.unwrap();
|
||||
handler.send_msg(AllMessages::BitfieldDistribution(test_bitfield_distribution_msg())).await.unwrap();
|
||||
handler.send_msg(AllMessages::Provisioner(test_provisioner_msg())).await.unwrap();
|
||||
handler.send_msg(AllMessages::PoVDistribution(test_pov_distribution_msg())).await.unwrap();
|
||||
handler.send_msg(AllMessages::RuntimeApi(test_runtime_api_msg())).await.unwrap();
|
||||
handler.send_msg(AllMessages::AvailabilityStore(test_availability_store_msg())).await.unwrap();
|
||||
handler.send_msg(AllMessages::NetworkBridge(test_network_bridge_msg())).await.unwrap();
|
||||
handler.send_msg(AllMessages::ChainApi(test_chain_api_msg())).await.unwrap();
|
||||
handler.send_msg(AllMessages::CandidateValidation(test_candidate_validation_msg())).await;
|
||||
handler.send_msg(AllMessages::CandidateBacking(test_candidate_backing_msg())).await;
|
||||
handler.send_msg(AllMessages::CandidateSelection(test_candidate_selection_msg())).await;
|
||||
handler.send_msg(AllMessages::CollationGeneration(test_collator_generation_msg())).await;
|
||||
handler.send_msg(AllMessages::CollatorProtocol(test_collator_protocol_msg())).await;
|
||||
handler.send_msg(AllMessages::StatementDistribution(test_statement_distribution_msg())).await;
|
||||
handler.send_msg(AllMessages::AvailabilityDistribution(test_availability_distribution_msg())).await;
|
||||
// handler.send_msg(AllMessages::BitfieldSigning(test_bitfield_signing_msg())).await;
|
||||
handler.send_msg(AllMessages::BitfieldDistribution(test_bitfield_distribution_msg())).await;
|
||||
handler.send_msg(AllMessages::Provisioner(test_provisioner_msg())).await;
|
||||
handler.send_msg(AllMessages::PoVDistribution(test_pov_distribution_msg())).await;
|
||||
handler.send_msg(AllMessages::RuntimeApi(test_runtime_api_msg())).await;
|
||||
handler.send_msg(AllMessages::AvailabilityStore(test_availability_store_msg())).await;
|
||||
handler.send_msg(AllMessages::NetworkBridge(test_network_bridge_msg())).await;
|
||||
handler.send_msg(AllMessages::ChainApi(test_chain_api_msg())).await;
|
||||
|
||||
// send a stop signal to each subsystems
|
||||
handler.stop().await.unwrap();
|
||||
handler.stop().await;
|
||||
|
||||
select! {
|
||||
res = overseer_fut => {
|
||||
|
||||
Reference in New Issue
Block a user