From a42cb69f6e19b5cda9b31fba6357c0fefa38b053 Mon Sep 17 00:00:00 2001 From: Pawan Dhananjay Date: Mon, 28 Mar 2022 23:32:11 +0000 Subject: [PATCH] Update engine state in broadcast (#3071) ## Issue Addressed N/A ## Proposed Changes Set the engine state to `EngineState::Offline` if the engine api call fails during broadcast. This caused issues while pausing sync when the execution engine is offline because `EngineState` always returned `Synced`. --- beacon_node/execution_layer/src/engines.rs | 26 +++++++++++++--------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/beacon_node/execution_layer/src/engines.rs b/beacon_node/execution_layer/src/engines.rs index a2c40ceb33..2396729743 100644 --- a/beacon_node/execution_layer/src/engines.rs +++ b/beacon_node/execution_layer/src/engines.rs @@ -399,18 +399,22 @@ impl Engines { let futures = self.engines.iter().map(|engine| async move { let is_offline = *engine.state.read().await == EngineState::Offline; if !is_offline { - func(engine).await.map_err(|error| { - debug!( - self.log, - "Execution engine call failed"; - "error" => ?error, - "id" => &engine.id - ); - EngineError::Api { - id: engine.id.clone(), - error, + match func(engine).await { + Ok(res) => Ok(res), + Err(error) => { + debug!( + self.log, + "Execution engine call failed"; + "error" => ?error, + "id" => &engine.id + ); + *engine.state.write().await = EngineState::Offline; + Err(EngineError::Api { + id: engine.id.clone(), + error, + }) } - }) + } } else { Err(EngineError::Offline { id: engine.id.clone(),