From 4aa9506d8c978ffe11108d040ef0d080596b5cff Mon Sep 17 00:00:00 2001 From: Solomon Date: Fri, 10 Oct 2025 14:26:42 +0100 Subject: [PATCH] Update process state on spawn failure (#968) --- crates/services/src/services/container.rs | 40 +++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/crates/services/src/services/container.rs b/crates/services/src/services/container.rs index b12533c2..cd8edbe0 100644 --- a/crates/services/src/services/container.rs +++ b/crates/services/src/services/container.rs @@ -633,9 +633,45 @@ pub trait ContainerService { .await?; } - let _ = self + if let Err(start_error) = self .start_execution_inner(task_attempt, &execution_process, executor_action) - .await?; + .await + { + // Mark process as failed + if let Err(update_error) = ExecutionProcess::update_completion( + &self.db().pool, + execution_process.id, + ExecutionProcessStatus::Failed, + None, + ) + .await + { + tracing::error!( + "Failed to mark execution process {} as failed after start error: {}", + execution_process.id, + update_error + ); + } + + // Persist the error to process stderr logs + let log_message = LogMsg::Stderr(format!("Failed to start execution: {start_error}")); + if let Ok(json_line) = serde_json::to_string(&log_message) + && let Err(err) = ExecutionProcessLogs::append_log_line( + &self.db().pool, + execution_process.id, + &format!("{json_line}\n"), + ) + .await + { + tracing::error!( + "Failed to write to process log table {}: {}", + execution_process.id, + err + ); + } + + return Err(start_error); + } // Start processing normalised logs for executor requests and follow ups match executor_action.typ() {