From d22491f6256a6b6a576f059dd3c8d3f2ed786361 Mon Sep 17 00:00:00 2001 From: Morris Jette <jette@schedmd.com> Date: Fri, 25 Jan 2013 09:51:04 -0800 Subject: [PATCH] Add slurmctld support to signal entire job array with one RPC --- src/slurmctld/job_mgr.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c index 7138eb82f53..bb28ef1d52a 100644 --- a/src/slurmctld/job_mgr.c +++ b/src/slurmctld/job_mgr.c @@ -3197,6 +3197,25 @@ extern int job_signal(uint32_t job_id, uint16_t signal, uint16_t flags, } job_ptr = find_job_record(job_id); + if ((flags & KILL_JOB_ARRAY) && /* signal entire job array */ + ((job_ptr == NULL) || + (job_ptr->array_task_id != (uint16_t) NO_VAL))) { + int rc = SLURM_SUCCESS, rc1; + ListIterator job_iter; + + flags &= (~KILL_JOB_ARRAY); + job_iter = list_iterator_create(job_list); + while ((job_ptr = (struct job_record *) list_next(job_iter))) { + if ((job_ptr->array_job_id != job_id) || + (job_ptr->array_task_id == (uint16_t)NO_VAL)) + continue; + rc1 = job_signal(job_ptr->job_id, signal, flags, + uid, preempt); + rc = MAX(rc, rc1); + } + list_iterator_destroy(job_iter); + return rc; + } if (job_ptr == NULL) { info("job_signal: invalid job id %u", job_id); return ESLURM_INVALID_JOB_ID; -- GitLab