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

Function handle_submit

crates/hyperqueue/src/server/client/submit.rs:138–229  ·  view source on GitHub ↗

Disable lint as it does not work well with drop

(
    state_ref: &StateRef,
    senders: &Senders,
    mut message: SubmitRequest,
)

Source from the content-addressed store, hash-verified

136
137#[allow(clippy::await_holding_refcell_ref)] // Disable lint as it does not work well with drop
138pub(crate) fn handle_submit(
139 state_ref: &StateRef,
140 senders: &Senders,
141 mut message: SubmitRequest,
142) -> ToClientMessage {
143 log_submit_request(&message);
144
145 let mut state = state_ref.get_mut();
146 if let Some(err) = validate_submit(
147 message.job_id.and_then(|job_id| state.get_job(job_id)),
148 &message.submit_desc.task_desc,
149 ) {
150 return ToClientMessage::SubmitResponse(err);
151 }
152
153 let (job_id, new_job) = if let Some(job_id) = message.job_id {
154 if let Some(job) = state.get_job(job_id) {
155 if !job.is_open() {
156 return ToClientMessage::SubmitResponse(SubmitResponse::JobNotOpened);
157 }
158 match &mut message.submit_desc.task_desc {
159 JobTaskDescription::Array { ids, entries, .. } => {
160 if ids.is_empty() {
161 let new_id = job.max_id().map(|x| x.as_num() + 1).unwrap_or(0);
162 if let Some(entries) = entries {
163 *ids =
164 IntArray::from_range(new_id, new_id + entries.len() as JobTaskCount)
165 } else {
166 *ids = IntArray::from_id(new_id)
167 }
168 }
169 }
170 JobTaskDescription::Graph { .. } => {}
171 }
172 } else {
173 return ToClientMessage::SubmitResponse(SubmitResponse::JobNotFound);
174 }
175 (job_id, false)
176 } else {
177 match &mut message.submit_desc.task_desc {
178 JobTaskDescription::Array { ids, entries, .. } => {
179 /* Try filling task ids */
180 if ids.is_empty() {
181 if let Some(entries) = entries {
182 *ids = IntArray::from_range(0, entries.len() as JobTaskCount)
183 } else {
184 *ids = IntArray::from_id(0)
185 }
186 }
187 }
188 JobTaskDescription::Graph { .. } => { /* Do nothing */ }
189 }
190 (state.new_job_id(), true)
191 };
192
193 senders.events.on_job_submitted(job_id, &message).unwrap();
194
195 let SubmitRequest {

Callers 1

client_rpc_loopFunction · 0.85

Calls 15

log_submit_requestFunction · 0.85
validate_submitFunction · 0.85
SubmitResponseEnum · 0.85
submit_job_descFunction · 0.85
get_jobMethod · 0.80
max_idMethod · 0.80
new_job_idMethod · 0.80
on_job_submittedMethod · 0.80
on_job_submitMethod · 0.80
make_job_detailMethod · 0.80
add_new_tasksMethod · 0.80
server_infoMethod · 0.80

Tested by

no test coverage detected