From 067dad79d27a66949f9bf9e6ee81d251f0290239 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Mon, 29 Jul 2024 15:13:23 +0200 Subject: [PATCH] feat: update backfill sync state to pending when we request it (#9865) --- crates/engine/tree/src/engine.rs | 7 +++++++ crates/engine/tree/src/tree/mod.rs | 20 ++++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/crates/engine/tree/src/engine.rs b/crates/engine/tree/src/engine.rs index bd4c220565..637bd5b944 100644 --- a/crates/engine/tree/src/engine.rs +++ b/crates/engine/tree/src/engine.rs @@ -216,6 +216,13 @@ pub enum EngineApiEvent { Download(DownloadRequest), } +impl EngineApiEvent { + /// Returns `true` if the event is a backfill action. + pub const fn is_backfill_action(&self) -> bool { + matches!(self, Self::BackfillAction(_)) + } +} + impl From for EngineApiEvent { fn from(event: BeaconConsensusEngineEvent) -> Self { Self::BeaconConsensus(event) diff --git a/crates/engine/tree/src/tree/mod.rs b/crates/engine/tree/src/tree/mod.rs index ece231d1ae..d9707f1467 100644 --- a/crates/engine/tree/src/tree/mod.rs +++ b/crates/engine/tree/src/tree/mod.rs @@ -635,14 +635,14 @@ where } /// Convenience function to handle an optional tree event. - fn on_maybe_tree_event(&self, event: Option) { + fn on_maybe_tree_event(&mut self, event: Option) { if let Some(event) = event { self.on_tree_event(event); } } /// Handles a tree event. - fn on_tree_event(&self, event: TreeEvent) { + fn on_tree_event(&mut self, event: TreeEvent) { match event { TreeEvent::TreeAction(action) => match action { TreeAction::MakeCanonical(target) => { @@ -659,10 +659,22 @@ where } /// Emits an outgoing event to the engine. - fn emit_event(&self, event: impl Into) { + fn emit_event(&mut self, event: impl Into) { + let event = event.into(); + + if event.is_backfill_action() { + debug_assert_eq!( + self.backfill_sync_state, + BackfillSyncState::Idle, + "backfill action should only be emitted when backfill is idle" + ); + self.backfill_sync_state = BackfillSyncState::Pending; + debug!(target: "engine", "emitting backfill action event"); + } + let _ = self .outgoing - .send(event.into()) + .send(event) .inspect_err(|err| error!("Failed to send internal event: {err:?}")); }