From 128372526a65b545cd3a6720aa883d6661c4e3fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Wed, 22 Mar 2023 21:10:23 +0100 Subject: [PATCH] Ensure candidate-backing and provisioner exit on missing Overseer This ensures that both subsystems exit when the Overseer has exited because of some error. --- node/core/backing/src/error.rs | 4 ++++ node/core/backing/src/lib.rs | 3 ++- node/core/provisioner/src/error.rs | 4 ++++ node/core/provisioner/src/lib.rs | 3 ++- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/node/core/backing/src/error.rs b/node/core/backing/src/error.rs index 36d4f859a0a8..bbe89c0afcb9 100644 --- a/node/core/backing/src/error.rs +++ b/node/core/backing/src/error.rs @@ -70,6 +70,10 @@ pub enum Error { #[error(transparent)] SubsystemError(#[from] SubsystemError), + + #[fatal] + #[error(transparent)] + OverseerExited(SubsystemError), } /// Utility for eating top level errors and log them. diff --git a/node/core/backing/src/lib.rs b/node/core/backing/src/lib.rs index 32a6bb79037b..078eb1d8d618 100644 --- a/node/core/backing/src/lib.rs +++ b/node/core/backing/src/lib.rs @@ -199,7 +199,8 @@ async fn run_iteration( } } from_overseer = ctx.recv().fuse() => { - match from_overseer? { + // Map the error to ensure that the subsystem exits when the overseer is gone. + match from_overseer.map_err(Error::OverseerExited)? { FromOrchestra::Signal(OverseerSignal::ActiveLeaves(update)) => handle_active_leaves_update( &mut *ctx, update, diff --git a/node/core/provisioner/src/error.rs b/node/core/provisioner/src/error.rs index de520fc1fe04..c049a326a735 100644 --- a/node/core/provisioner/src/error.rs +++ b/node/core/provisioner/src/error.rs @@ -75,6 +75,10 @@ pub enum Error { #[error(transparent)] SubsystemError(#[from] SubsystemError), + + #[fatal] + #[error(transparent)] + OverseerExited(SubsystemError), } /// Used by `get_onchain_disputes` to represent errors related to fetching on-chain disputes from the Runtime diff --git a/node/core/provisioner/src/lib.rs b/node/core/provisioner/src/lib.rs index be0b051a107c..0c9853e90191 100644 --- a/node/core/provisioner/src/lib.rs +++ b/node/core/provisioner/src/lib.rs @@ -144,7 +144,8 @@ async fn run_iteration( loop { futures::select! { from_overseer = ctx.recv().fuse() => { - match from_overseer? { + // Map the error to ensure that the subsystem exits when the overseer is gone. + match from_overseer.map_err(Error::OverseerExited)? { FromOrchestra::Signal(OverseerSignal::ActiveLeaves(update)) => handle_active_leaves_update(update, per_relay_parent, inherent_delays), FromOrchestra::Signal(OverseerSignal::BlockFinalized(..)) => {},