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