diff --git a/crates/workspace-server/src/retention.rs b/crates/workspace-server/src/retention.rs index f4e06eb6..6e9e5751 100644 --- a/crates/workspace-server/src/retention.rs +++ b/crates/workspace-server/src/retention.rs @@ -106,12 +106,15 @@ pub struct WorkerRemovalPlan { pub reason: String, pub created_at: String, pub updated_at: String, + #[serde(skip_serializing_if = "Option::is_none")] + pub failure_category: Option, } #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] pub struct PreparedWorkerRemoval { pub plan: WorkerRemovalPlan, pub runtime_request: WorkerRetentionExecutionRequest, + pub prior_failure_category: Option, } #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] @@ -369,6 +372,7 @@ impl SqliteWorkspaceStore { ) })?; let removed_at = plan.created_at.clone(); + let prior_failure_category = plan.failure_category.clone(); Ok(PreparedWorkerRemoval { runtime_request: WorkerRetentionExecutionRequest { operation_id: plan.operation_id.clone(), @@ -389,6 +393,7 @@ impl SqliteWorkspaceStore { diagnostics_disposition: plan.diagnostics_disposition, }, plan, + prior_failure_category, }) } @@ -429,6 +434,7 @@ impl SqliteWorkspaceStore { let Some(plan) = plan else { return Ok(None); }; + let prior_failure_category = plan.failure_category.clone(); let worker_number = plan.worker.worker_id.parse::().map_err(|_| { WorkerRetentionError::Invalid( "Runtime Worker id is not a canonical unsigned integer".to_string(), @@ -468,6 +474,7 @@ impl SqliteWorkspaceStore { diagnostics_disposition: plan.diagnostics_disposition, }, plan, + prior_failure_category, })) } @@ -758,7 +765,7 @@ fn load_plan_q(c: &Connection, key: &str, id: &str) -> crate::Result crate::Result