MCPcopy Create free account
hub / github.com/It4innovations/hyperqueue / validate_submit

Function validate_submit

crates/hyperqueue/src/server/client/submit.rs:88–135  ·  view source on GitHub ↗
(
    job: Option<&Job>,
    task_desc: &JobTaskDescription,
)

Source from the content-addressed store, hash-verified

86}
87
88pub(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
138pub(crate) fn handle_submit(

Callers 2

restore_jobMethod · 0.85
handle_submitFunction · 0.85

Calls 3

containsMethod · 0.80
iterMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected