From 96c09ba2fea7ff5a02ec132c0cc20876a0b472ab Mon Sep 17 00:00:00 2001 From: Niven Date: Fri, 19 Dec 2025 11:49:54 +0800 Subject: [PATCH 1/4] Add flashblock ws connection retry period --- crates/optimism/flashblocks/src/consensus.rs | 3 ++- crates/optimism/flashblocks/src/service.rs | 20 +++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/crates/optimism/flashblocks/src/consensus.rs b/crates/optimism/flashblocks/src/consensus.rs index 0b502c07387..8eab87bc8e0 100644 --- a/crates/optimism/flashblocks/src/consensus.rs +++ b/crates/optimism/flashblocks/src/consensus.rs @@ -135,7 +135,8 @@ where } } - /// Runs the consensus client loop. + /// Runs the consensus client loop. The flashblock consensus should be the only source that + /// drive the chain forward. /// /// Continuously receives completed flashblock sequences and submits them to the execution /// engine: diff --git a/crates/optimism/flashblocks/src/service.rs b/crates/optimism/flashblocks/src/service.rs index 4eed74683f7..a2a10f97cf3 100644 --- a/crates/optimism/flashblocks/src/service.rs +++ b/crates/optimism/flashblocks/src/service.rs @@ -12,10 +12,18 @@ use reth_primitives_traits::{AlloyBlockHeader, BlockTy, HeaderTy, NodePrimitives use reth_revm::cached::CachedReads; use reth_storage_api::{BlockReaderIdExt, StateProviderFactory}; use reth_tasks::TaskExecutor; -use std::{sync::Arc, time::Instant}; -use tokio::sync::{oneshot, watch}; +use std::{ + sync::Arc, + time::{Duration, Instant}, +}; +use tokio::{ + sync::{oneshot, watch}, + time::sleep, +}; use tracing::*; +const CONNECTION_RETRY_DELAY: Duration = Duration::from_secs(5); + /// The `FlashBlockService` maintains an in-memory [`PendingFlashBlock`] built out of a sequence of /// [`FlashBlock`]s. #[derive(Debug)] @@ -167,7 +175,13 @@ where self.try_start_build_job(); } Some(Err(err)) => { - warn!(target: "flashblocks", %err, "Error receiving flashblock"); + warn!( + target: "flashblocks", + %err, + delay_secs = CONNECTION_RETRY_DELAY.as_secs(), + "Error receiving flashblock" + ); + sleep(CONNECTION_RETRY_DELAY).await; } None => { warn!(target: "flashblocks", "Flashblock stream ended"); From 393930b2c678a8e8804a20db5b6631b891ffb086 Mon Sep 17 00:00:00 2001 From: Niven Date: Fri, 19 Dec 2025 11:52:48 +0800 Subject: [PATCH 2/4] Better naming --- crates/optimism/flashblocks/src/service.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/optimism/flashblocks/src/service.rs b/crates/optimism/flashblocks/src/service.rs index a2a10f97cf3..7aa30cee4eb 100644 --- a/crates/optimism/flashblocks/src/service.rs +++ b/crates/optimism/flashblocks/src/service.rs @@ -22,7 +22,7 @@ use tokio::{ }; use tracing::*; -const CONNECTION_RETRY_DELAY: Duration = Duration::from_secs(5); +const CONNECTION_RETRY_PERIOD: Duration = Duration::from_secs(5); /// The `FlashBlockService` maintains an in-memory [`PendingFlashBlock`] built out of a sequence of /// [`FlashBlock`]s. @@ -178,10 +178,10 @@ where warn!( target: "flashblocks", %err, - delay_secs = CONNECTION_RETRY_DELAY.as_secs(), + retry_period = CONNECTION_RETRY_PERIOD.as_secs(), "Error receiving flashblock" ); - sleep(CONNECTION_RETRY_DELAY).await; + sleep(CONNECTION_RETRY_PERIOD).await; } None => { warn!(target: "flashblocks", "Flashblock stream ended"); From fd863920ee4cc58b1c0089e009540493f36117b0 Mon Sep 17 00:00:00 2001 From: Niven Date: Fri, 19 Dec 2025 12:28:49 +0800 Subject: [PATCH 3/4] Revert comments --- crates/optimism/flashblocks/src/consensus.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/optimism/flashblocks/src/consensus.rs b/crates/optimism/flashblocks/src/consensus.rs index 8eab87bc8e0..0b502c07387 100644 --- a/crates/optimism/flashblocks/src/consensus.rs +++ b/crates/optimism/flashblocks/src/consensus.rs @@ -135,8 +135,7 @@ where } } - /// Runs the consensus client loop. The flashblock consensus should be the only source that - /// drive the chain forward. + /// Runs the consensus client loop. /// /// Continuously receives completed flashblock sequences and submits them to the execution /// engine: From 1c65b4df799e006aabd0a78f0af419871fc26997 Mon Sep 17 00:00:00 2001 From: Niven Date: Tue, 23 Dec 2025 11:01:24 +0800 Subject: [PATCH 4/4] Better rename --- crates/optimism/flashblocks/src/service.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/optimism/flashblocks/src/service.rs b/crates/optimism/flashblocks/src/service.rs index 7aa30cee4eb..02a3bc7b73c 100644 --- a/crates/optimism/flashblocks/src/service.rs +++ b/crates/optimism/flashblocks/src/service.rs @@ -22,7 +22,7 @@ use tokio::{ }; use tracing::*; -const CONNECTION_RETRY_PERIOD: Duration = Duration::from_secs(5); +const CONNECTION_BACKOUT_PERIOD: Duration = Duration::from_secs(5); /// The `FlashBlockService` maintains an in-memory [`PendingFlashBlock`] built out of a sequence of /// [`FlashBlock`]s. @@ -178,10 +178,10 @@ where warn!( target: "flashblocks", %err, - retry_period = CONNECTION_RETRY_PERIOD.as_secs(), + retry_period = CONNECTION_BACKOUT_PERIOD.as_secs(), "Error receiving flashblock" ); - sleep(CONNECTION_RETRY_PERIOD).await; + sleep(CONNECTION_BACKOUT_PERIOD).await; } None => { warn!(target: "flashblocks", "Flashblock stream ended");