Skip to content
Snippets Groups Projects
Commit c086e56a authored by Morris Jette's avatar Morris Jette
Browse files

Add support for modifying all components of pack job

When the "scontrol update jobid=#" command specifies a pack job
leader, then modify all components of the pack job. To modiify only
the pack job leader, specify "scontrol update jobid=#+0".
parent bb8b4214
No related branches found
No related tags found
No related merge requests found
......@@ -223,7 +223,7 @@ $ squeue --job=93
JOBID PARTITION NAME USER ST TIME NODES NODELIST
</pre>
<pWhile a heterogeneous job is in pending state, only the entire job can be
<p>While a heterogeneous job is in pending state, only the entire job can be
cancelled rather than it's individual components.
A request to cancel an individual component of a heterogeneous job not in
pending state will return an error.
......@@ -233,6 +233,19 @@ After the job has begun execution, the individual component can be cancelled.</p
is only supported for a pack leader. Requests for email notifications for other
components of a heterogeneous job will be silently ignored.</p>
<p>Requests to modify an individual component of a job using the scontrol
command must specify the job ID with the "#+#" notation.
A request to modify a job by specifying the pack_job_id will modify all
components of a heterogeneous job.
For example:</p>
<pre>
# Change the account of compnent 2 of heterogeneous job 123:
$ scontrol update jobid=123+2 account=abc
# Change the time limit of all components of heterogeneous job 123:
$ scontrol update jobid=123 timelimit=60
</pre>
<p>Requests to perform the following operations a job can only be requested for
a pack leader and will be applied to all components of that heterogeneous job.
Requests to operate on individual components of the heterogeneous will return
......@@ -470,6 +483,6 @@ especially other heterogeneous jobs.</p>
<p class="footer"><a href="#top">top</a></p>
<p style="text-align:center;">Last modified 11 August 2017</p>
<p style="text-align:center;">Last modified 14 August 2017</p>
<!--#include virtual="footer.txt"-->
......@@ -12767,9 +12767,11 @@ extern int update_job(slurm_msg_t *msg, uid_t uid, bool send_msg)
*/
extern int update_job_str(slurm_msg_t *msg, uid_t uid)
{
slurm_msg_t resp_msg;
job_desc_msg_t *job_specs = (job_desc_msg_t *) msg->data;
struct job_record *job_ptr, *new_job_ptr;
struct job_record *job_ptr, *new_job_ptr, *pack_job;
ListIterator iter;
long int long_id;
uint32_t job_id = 0, pack_offset;
bitstr_t *array_bitmap = NULL, *tmp_bitmap;
......@@ -12799,6 +12801,20 @@ extern int update_job_str(slurm_msg_t *msg, uid_t uid)
if (end_ptr[0] == '\0') { /* Single job (or full job array) */
struct job_record *job_ptr_done = NULL;
job_ptr = find_job_record(job_id);
if (job_ptr && job_ptr->pack_job_list) {
iter = list_iterator_create(job_ptr->pack_job_list);
while ((pack_job = list_next(iter))) {
if (job_ptr->pack_job_id !=
pack_job->pack_job_id) {
error("%s: Bad pack_job_list for job %u",
__func__, job_ptr->pack_job_id);
continue;
}
rc = _update_job(pack_job, job_specs, uid);
}
list_iterator_destroy(iter);
goto reply;
}
if (job_ptr &&
(((job_ptr->array_task_id == NO_VAL) &&
(job_ptr->array_recs == NULL)) ||
......@@ -12842,7 +12858,7 @@ extern int update_job_str(slurm_msg_t *msg, uid_t uid)
goto reply;
} else if (end_ptr[0] == '+') { /* Pack job element */
long_id = strtol(end_ptr+1, &tmp, 10);
if ((long_id <= 0) || (long_id == LONG_MAX) ||
if ((long_id < 0) || (long_id == LONG_MAX) ||
(tmp[0] != '\0')) {
info("%s: invalid job id %s", __func__, job_id_str);
rc = ESLURM_INVALID_JOB_ID;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment