@@ -22,6 +22,7 @@ use twmq::{
2222use crate::eoa::authorization_cache::EoaAuthorizationCache;
2323use crate::eoa::store::{
2424 AtomicEoaExecutorStore, EoaExecutorStore, EoaExecutorStoreKeys, EoaHealth, SubmissionResult,
25+ TransactionStoreError,
2526};
2627use crate::metrics::{
2728 EoaMetrics, calculate_duration_seconds, current_timestamp_ms, record_eoa_job_processing_time,
@@ -241,13 +242,25 @@ where
241242 self.soft_release_eoa_lock(&job.job.data).await;
242243 }
243244
245+ #[tracing::instrument(name = "eoa_executor_worker_on_fail", skip_all, fields(eoa = ?job.job.data.eoa_address, chain_id = job.job.data.chain_id, job_id = ?job.job.id))]
244246 async fn on_fail(
245247 &self,
246248 job: &BorrowedJob<Self::JobData>,
247- _fail_data : FailHookData<'_, Self::ErrorData>,
249+ fail_data : FailHookData<'_, Self::ErrorData>,
248250 _tx: &mut TransactionContext<'_>,
249251 ) {
250- self.soft_release_eoa_lock(&job.job.data).await;
252+ if let EoaExecutorWorkerError::StoreError { inner_error, .. } = &fail_data.error {
253+ if let TransactionStoreError::LockLost { .. } = &inner_error {
254+ tracing::error!(
255+ eoa = ?job.job.data.eoa_address,
256+ chain_id = job.job.data.chain_id,
257+ "Encountered lock lost store error, skipping soft release of EOA lock"
258+ );
259+ return;
260+ }
261+ } else {
262+ self.soft_release_eoa_lock(&job.job.data).await;
263+ }
251264 }
252265}
253266
0 commit comments