From 73cd287d9611c8d3de366cd47a4239d6541b3e7f Mon Sep 17 00:00:00 2001 From: dylan Date: Mon, 16 Jun 2025 15:00:56 -0600 Subject: [PATCH 1/4] fix: use spans properly in submit task --- src/tasks/submit/task.rs | 81 ++++++++++++++++------------------------ 1 file changed, 33 insertions(+), 48 deletions(-) diff --git a/src/tasks/submit/task.rs b/src/tasks/submit/task.rs index 900e86c..14f6517 100644 --- a/src/tasks/submit/task.rs +++ b/src/tasks/submit/task.rs @@ -17,11 +17,12 @@ use alloy::{ use eyre::bail; use init4_bin_base::deps::{ metrics::{counter, histogram}, - tracing::{Instrument, debug, debug_span, error, info, warn}, + tracing::{debug, debug_span, error, info, warn}, }; use signet_constants::SignetSystemConstants; use std::time::Instant; use tokio::{sync::mpsc, task::JoinHandle}; +use tracing::Instrument; macro_rules! spawn_provider_send { ($provider:expr, $tx:expr) => { @@ -130,21 +131,22 @@ impl SubmitTask { retry_limit: usize, ) -> eyre::Result { let submitting_start_time = Instant::now(); - let now = utils::now(); let (expected_slot, start, end) = self.calculate_slot_window(); - debug!(expected_slot, start, end, now, "calculating target slot window"); + debug!(expected_slot, start, end, "calculating target slot window"); let mut req = bumpable.req().clone(); + let span = debug_span!( + "SubmitTask::retrying_send", + initial_nonce = ?bumpable.req().nonce, + ); + let _guard = span.enter(); + // Retry loop let result = loop { - let span = debug_span!( - "SubmitTask::retrying_send", - retries = bumpable.bump_count(), - nonce = bumpable.req().nonce, - ); + debug!(retries = bumpable.bump_count(), nonce = ?req.nonce, "attempting transaction send"); - let inbound_result = match self.send_transaction(req).instrument(span.clone()).await { + let inbound_result = match self.send_transaction(req.clone()).await { Ok(control_flow) => control_flow, Err(error) => { if let Some(value) = self.slot_still_valid(expected_slot) { @@ -156,8 +158,6 @@ impl SubmitTask { } }; - let guard = span.entered(); - match inbound_result { ControlFlow::Retry => { if let Some(value) = self.slot_still_valid(expected_slot) { @@ -170,7 +170,6 @@ impl SubmitTask { debug!("retries exceeded - skipping block"); return Ok(ControlFlow::Skip); } - drop(guard); debug!(retries = bumpable.bump_count(), start, end, "retrying block"); continue; } @@ -230,44 +229,37 @@ impl SubmitTask { let ru_block_number = sim_result.block.block_number(); let host_block_number = self.constants.rollup_block_to_host_block_num(ru_block_number); + // Don't submit empty blocks + if sim_result.block.is_empty() { + debug!(ru_block_number, "received empty block - skipping"); + continue; + } + + // Create a span for the entire block processing operation let span = debug_span!( "SubmitTask::loop", ru_block_number, host_block_number, block_tx_count = sim_result.block.tx_count(), ); - let guard = span.enter(); - + let _guard = span.enter(); debug!(ru_block_number, "submit channel received block"); - // Don't submit empty blocks - if sim_result.block.is_empty() { - debug!(ru_block_number, "received empty block - skipping"); - continue; - } - - // drop guard before await - drop(guard); - + let prev_host_number = host_block_number - 1; let Ok(Some(prev_host)) = self .provider() - .get_block_by_number(host_block_number.into()) + .get_block_by_number(prev_host_number.into()) .into_future() .instrument(span.clone()) .await else { - let _guard = span.enter(); warn!(ru_block_number, host_block_number, "failed to get previous host block"); continue; }; - // Prep the span we'll use for the transaction submission - let submission_span = debug_span!( - parent: span, - "SubmitTask::tx_submission", + debug!( tx_count = sim_result.block.tx_count(), - host_block_number, - ru_block_number, + host_block_number, ru_block_number, "preparing transaction submission" ); // Prepare the transaction request for submission @@ -278,30 +270,23 @@ impl SubmitTask { self.config.clone(), self.constants, ); - let bumpable = match prep - .prep_transaction(&prev_host.header) - .instrument(submission_span.clone()) - .await - { - Ok(bumpable) => bumpable, - Err(error) => { - error!(%error, "failed to prepare transaction for submission"); - continue; - } - }; + let bumpable = + match prep.prep_transaction(&prev_host.header).instrument(span.clone()).await { + Ok(bumpable) => bumpable, + Err(error) => { + error!(%error, "failed to prepare transaction for submission"); + continue; + } + }; // Simulate the transaction to check for reverts - if let Err(error) = - self.sim_with_call(bumpable.req()).instrument(submission_span.clone()).await - { + if let Err(error) = self.sim_with_call(bumpable.req()).instrument(span.clone()).await { error!(%error, "simulation failed for transaction"); continue; }; // Now send the transaction - if let Err(error) = - self.retrying_send(bumpable, 3).instrument(submission_span.clone()).await - { + if let Err(error) = self.retrying_send(bumpable, 3).instrument(span.clone()).await { error!(%error, "error dispatching block to host chain"); continue; } From 67019296b9318027b1ac0292ad7aa3f92ef2f851 Mon Sep 17 00:00:00 2001 From: dylan Date: Mon, 16 Jun 2025 15:04:20 -0600 Subject: [PATCH 2/4] add back span --- src/tasks/submit/task.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/tasks/submit/task.rs b/src/tasks/submit/task.rs index 14f6517..3f1676c 100644 --- a/src/tasks/submit/task.rs +++ b/src/tasks/submit/task.rs @@ -146,17 +146,18 @@ impl SubmitTask { let result = loop { debug!(retries = bumpable.bump_count(), nonce = ?req.nonce, "attempting transaction send"); - let inbound_result = match self.send_transaction(req.clone()).await { - Ok(control_flow) => control_flow, - Err(error) => { - if let Some(value) = self.slot_still_valid(expected_slot) { - return value; + let inbound_result = + match self.send_transaction(req.clone()).instrument(span.clone()).await { + Ok(control_flow) => control_flow, + Err(error) => { + if let Some(value) = self.slot_still_valid(expected_slot) { + return value; + } + // Log error and retry + error!(%error, "error handling inbound block"); + ControlFlow::Retry } - // Log error and retry - error!(%error, "error handling inbound block"); - ControlFlow::Retry - } - }; + }; match inbound_result { ControlFlow::Retry => { From ace7f36a361f22986c1da1b3eeab7ef8b6f221e7 Mon Sep 17 00:00:00 2001 From: dylan Date: Mon, 16 Jun 2025 15:15:17 -0600 Subject: [PATCH 3/4] cleanup --- src/tasks/submit/task.rs | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/tasks/submit/task.rs b/src/tasks/submit/task.rs index 3f1676c..868207f 100644 --- a/src/tasks/submit/task.rs +++ b/src/tasks/submit/task.rs @@ -22,7 +22,6 @@ use init4_bin_base::deps::{ use signet_constants::SignetSystemConstants; use std::time::Instant; use tokio::{sync::mpsc, task::JoinHandle}; -use tracing::Instrument; macro_rules! spawn_provider_send { ($provider:expr, $tx:expr) => { @@ -136,18 +135,12 @@ impl SubmitTask { let mut req = bumpable.req().clone(); - let span = debug_span!( - "SubmitTask::retrying_send", - initial_nonce = ?bumpable.req().nonce, - ); - let _guard = span.enter(); - // Retry loop let result = loop { debug!(retries = bumpable.bump_count(), nonce = ?req.nonce, "attempting transaction send"); let inbound_result = - match self.send_transaction(req.clone()).instrument(span.clone()).await { + match self.send_transaction(req.clone()).await { Ok(control_flow) => control_flow, Err(error) => { if let Some(value) = self.slot_still_valid(expected_slot) { @@ -251,7 +244,6 @@ impl SubmitTask { .provider() .get_block_by_number(prev_host_number.into()) .into_future() - .instrument(span.clone()) .await else { warn!(ru_block_number, host_block_number, "failed to get previous host block"); @@ -272,7 +264,7 @@ impl SubmitTask { self.constants, ); let bumpable = - match prep.prep_transaction(&prev_host.header).instrument(span.clone()).await { + match prep.prep_transaction(&prev_host.header).await { Ok(bumpable) => bumpable, Err(error) => { error!(%error, "failed to prepare transaction for submission"); @@ -281,13 +273,13 @@ impl SubmitTask { }; // Simulate the transaction to check for reverts - if let Err(error) = self.sim_with_call(bumpable.req()).instrument(span.clone()).await { + if let Err(error) = self.sim_with_call(bumpable.req()).await { error!(%error, "simulation failed for transaction"); continue; }; // Now send the transaction - if let Err(error) = self.retrying_send(bumpable, 3).instrument(span.clone()).await { + if let Err(error) = self.retrying_send(bumpable, 3).await { error!(%error, "error dispatching block to host chain"); continue; } From 415baae17f0194bb39f3f5825b9d5473f27a3ece Mon Sep 17 00:00:00 2001 From: dylan Date: Mon, 16 Jun 2025 16:10:23 -0600 Subject: [PATCH 4/4] fmt --- src/tasks/submit/task.rs | 43 ++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/src/tasks/submit/task.rs b/src/tasks/submit/task.rs index 868207f..e8da730 100644 --- a/src/tasks/submit/task.rs +++ b/src/tasks/submit/task.rs @@ -139,18 +139,17 @@ impl SubmitTask { let result = loop { debug!(retries = bumpable.bump_count(), nonce = ?req.nonce, "attempting transaction send"); - let inbound_result = - match self.send_transaction(req.clone()).await { - Ok(control_flow) => control_flow, - Err(error) => { - if let Some(value) = self.slot_still_valid(expected_slot) { - return value; - } - // Log error and retry - error!(%error, "error handling inbound block"); - ControlFlow::Retry + let inbound_result = match self.send_transaction(req.clone()).await { + Ok(control_flow) => control_flow, + Err(error) => { + if let Some(value) = self.slot_still_valid(expected_slot) { + return value; } - }; + // Log error and retry + error!(%error, "error handling inbound block"); + ControlFlow::Retry + } + }; match inbound_result { ControlFlow::Retry => { @@ -240,11 +239,8 @@ impl SubmitTask { debug!(ru_block_number, "submit channel received block"); let prev_host_number = host_block_number - 1; - let Ok(Some(prev_host)) = self - .provider() - .get_block_by_number(prev_host_number.into()) - .into_future() - .await + let Ok(Some(prev_host)) = + self.provider().get_block_by_number(prev_host_number.into()).into_future().await else { warn!(ru_block_number, host_block_number, "failed to get previous host block"); continue; @@ -263,14 +259,13 @@ impl SubmitTask { self.config.clone(), self.constants, ); - let bumpable = - match prep.prep_transaction(&prev_host.header).await { - Ok(bumpable) => bumpable, - Err(error) => { - error!(%error, "failed to prepare transaction for submission"); - continue; - } - }; + let bumpable = match prep.prep_transaction(&prev_host.header).await { + Ok(bumpable) => bumpable, + Err(error) => { + error!(%error, "failed to prepare transaction for submission"); + continue; + } + }; // Simulate the transaction to check for reverts if let Err(error) = self.sim_with_call(bumpable.req()).await {