@@ -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