(
job: Option<&Job>,
task_desc: &JobTaskDescription,
)
| 86 | } |
| 87 | |
| 88 | pub(crate) fn validate_submit( |
| 89 | job: Option<&Job>, |
| 90 | task_desc: &JobTaskDescription, |
| 91 | ) -> Option<SubmitResponse> { |
| 92 | match &task_desc { |
| 93 | JobTaskDescription::Array { ids, .. } => { |
| 94 | if let Some(job) = job { |
| 95 | for id in ids.iter() { |
| 96 | let id = JobTaskId::new(id); |
| 97 | if job.tasks.contains_key(&id) { |
| 98 | return Some(SubmitResponse::TaskIdAlreadyExists(id)); |
| 99 | } |
| 100 | } |
| 101 | } |
| 102 | } |
| 103 | JobTaskDescription::Graph { |
| 104 | tasks, |
| 105 | resource_rqs, |
| 106 | } => { |
| 107 | if let Some(job) = job { |
| 108 | for task in tasks { |
| 109 | if job.tasks.contains_key(&task.id) { |
| 110 | let id = task.id; |
| 111 | return Some(SubmitResponse::TaskIdAlreadyExists(id)); |
| 112 | } |
| 113 | assert!(task.resource_rq_id.as_usize() < resource_rqs.len()) |
| 114 | } |
| 115 | } |
| 116 | let mut task_ids = Set::new(); |
| 117 | for task in tasks { |
| 118 | if !task_ids.insert(task.id) { |
| 119 | return Some(SubmitResponse::NonUniqueTaskId(task.id)); |
| 120 | } |
| 121 | for dep_id in &task.task_deps { |
| 122 | if *dep_id == task.id |
| 123 | || (!task_ids.contains(dep_id) |
| 124 | && !job |
| 125 | .map(|job| job.tasks.contains_key(dep_id)) |
| 126 | .unwrap_or(false)) |
| 127 | { |
| 128 | return Some(SubmitResponse::InvalidDependencies(*dep_id)); |
| 129 | } |
| 130 | } |
| 131 | } |
| 132 | } |
| 133 | } |
| 134 | None |
| 135 | } |
| 136 | |
| 137 | #[allow(clippy::await_holding_refcell_ref)] // Disable lint as it does not work well with drop |
| 138 | pub(crate) fn handle_submit( |
no test coverage detected