diff --git a/src/worker/job_worker.rs b/src/worker/job_worker.rs index 4b5cb34..2c04c05 100644 --- a/src/worker/job_worker.rs +++ b/src/worker/job_worker.rs @@ -1304,20 +1304,36 @@ impl JobWorker { }) }); - let all_completed = results - .iter() - .filter(|r| job_processors.contains(&r.processor_type.as_str().to_string())) - .all(|r| matches!(r.status, crate::core::db::ProcessorJobStatus::Completed)); + let all_completed = job_processors.iter().all(|p| { + results.iter().any(|r| { + r.processor_type.as_str() == p + && matches!(r.status, crate::core::db::ProcessorJobStatus::Completed) + }) + }); let any_failed = results .iter() .filter(|r| job_processors.contains(&r.processor_type.as_str().to_string())) .any(|r| matches!(r.status, crate::core::db::ProcessorJobStatus::Failed)); - let any_pending = results - .iter() - .filter(|r| job_processors.contains(&r.processor_type.as_str().to_string())) - .any(|r| matches!(r.status, crate::core::db::ProcessorJobStatus::Pending)); + let any_pending = job_processors.iter().any(|p| { + results.iter().any(|r| { + r.processor_type.as_str() == p + && matches!(r.status, crate::core::db::ProcessorJobStatus::Pending) + }) + }); + + // Check for missing processors (in job_processors but not in results) + let missing_processors: Vec = job_processors.iter().filter(|p| { + !results.iter().any(|r| r.processor_type.as_str() == *p) + }).cloned().collect(); + + if !missing_processors.is_empty() { + info!( + "check_and_complete_job: {} missing processor results: {:?}", + uuid, missing_processors + ); + } const MAX_RETRIES: i32 = 3;