From b1223e217a35ff39e330d76f762e45d3a86866ef Mon Sep 17 00:00:00 2001
From: Morris Jette <jette@schedmd.com>
Date: Tue, 6 Jun 2017 09:46:56 -0600
Subject: [PATCH] Disable pack jobs with select/serial plugin

---
 doc/html/heterogeneous_jobs.shtml |  4 +++-
 src/slurmctld/job_mgr.c           |  5 +++--
 src/slurmctld/job_scheduler.c     | 12 +++++++-----
 src/slurmctld/proc_req.c          | 19 +++++++++++++++++--
 4 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/doc/html/heterogeneous_jobs.shtml b/doc/html/heterogeneous_jobs.shtml
index 99cc61f61eb..fcba8a11ad2 100644
--- a/doc/html/heterogeneous_jobs.shtml
+++ b/doc/html/heterogeneous_jobs.shtml
@@ -236,8 +236,10 @@ components of a heterogeneous job.</p>
 
 <p>Job arrays of heterogeneous jobs are not supported.</p>
 
+<p>Heterogeneous jobs are not supported with Slurm's select/serial plugin.</p>
+
 <p class="footer"><a href="#top">top</a></p>
 
-<p style="text-align:center;">Last modified 5 June 2017</p>
+<p style="text-align:center;">Last modified 6 June 2017</p>
 
 <!--#include virtual="footer.txt"-->
diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c
index 1bfff5b90f8..4f6009aed34 100644
--- a/src/slurmctld/job_mgr.c
+++ b/src/slurmctld/job_mgr.c
@@ -7870,8 +7870,9 @@ void job_time_limit(void)
 			prolog = job_ptr->details->prolog_running;
 		if ((prolog == 0) && IS_JOB_CONFIGURING(job_ptr) &&
 		    test_job_nodes_ready(job_ptr)) {
-			info("%s: Configuration for job %u is complete",
-			      __func__, job_ptr->job_id);
+			char job_id_buf[JBUFSIZ];
+			info("%s: Configuration for %s complete", __func__,
+			     jobid2fmt(job_ptr, job_id_buf,sizeof(job_id_buf)));
 			job_config_fini(job_ptr);
 			if (job_ptr->bit_flags & NODE_REBOOT) {
 				job_ptr->bit_flags &= (~NODE_REBOOT);
diff --git a/src/slurmctld/job_scheduler.c b/src/slurmctld/job_scheduler.c
index 3f9e3ebb87f..4a3608605e7 100644
--- a/src/slurmctld/job_scheduler.c
+++ b/src/slurmctld/job_scheduler.c
@@ -738,9 +738,10 @@ extern bool replace_batch_job(slurm_msg_t * msg, void *fini_job, bool locked)
 		if (!job_ptr)
 			break;
 
-		if ((job_ptr == fini_job_ptr) ||
-		    (job_ptr->priority == 0)  ||
-		    (job_ptr->details == NULL) ||
+		if ((job_ptr == fini_job_ptr)   ||
+		    (job_ptr->priority == 0)    ||
+		    (job_ptr->pack_job_id != 0) ||
+		    (job_ptr->details == NULL)  ||
 		    !avail_front_end(job_ptr))
 			continue;
 
@@ -4035,8 +4036,9 @@ extern void prolog_running_decr(struct job_record *job_ptr)
 		return;
 
 	if (IS_JOB_CONFIGURING(job_ptr) && test_job_nodes_ready(job_ptr)) {
-		info("%s: Configuration for job %u is complete",
-		      __func__, job_ptr->job_id);
+		char job_id_buf[JBUFSIZ];
+		info("%s: Configuration for %s is complete", __func__,
+		     jobid2fmt(job_ptr, job_id_buf, sizeof(job_id_buf)));
 		job_config_fini(job_ptr);
 		if (job_ptr->batch_flag &&
 		    (IS_JOB_RUNNING(job_ptr) || IS_JOB_SUSPENDED(job_ptr))) {
diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c
index 4e0045aa461..28051bde55d 100644
--- a/src/slurmctld/proc_req.c
+++ b/src/slurmctld/proc_req.c
@@ -1166,6 +1166,7 @@ static void _trigger_backfill(void)
 /* _slurm_rpc_allocate_pack: process RPC to allocate a pack job resources */
 static void _slurm_rpc_allocate_pack(slurm_msg_t * msg)
 {
+	static int select_serial = -1;
 	static int active_rpc_cnt = 0;
 	int error_code = SLURM_SUCCESS;
 	DEF_TIMERS;
@@ -1192,7 +1193,13 @@ static void _slurm_rpc_allocate_pack(slurm_msg_t * msg)
 
 	START_TIMER;
 
-	if (slurmctld_config.submissions_disabled) {
+	if (select_serial == -1) {
+		if (xstrcmp(slurmctld_conf.select_type, "select/serial"))
+			select_serial = 0;
+		else
+			select_serial = 1;
+	}
+	if (slurmctld_config.submissions_disabled || (select_serial == 1)) {
 		info("Submissions disabled on system");
 		error_code = ESLURM_SUBMISSIONS_DISABLED;
 		goto send_msg;
@@ -3816,6 +3823,7 @@ send_msg:
 /* _slurm_rpc_submit_batch_pack_job - process RPC to submit a batch pack job */
 static void _slurm_rpc_submit_batch_pack_job(slurm_msg_t *msg)
 {
+	static int select_serial = -1;
 	static int active_rpc_cnt = 0, alloc_only = 0;
 	ListIterator iter;
 	int error_code = SLURM_SUCCESS;
@@ -3849,7 +3857,13 @@ static void _slurm_rpc_submit_batch_pack_job(slurm_msg_t *msg)
 		     uid);
 		error_code = SLURM_ERROR;
 	}
-	if (slurmctld_config.submissions_disabled) {
+	if (select_serial == -1) {
+		if (xstrcmp(slurmctld_conf.select_type, "select/serial"))
+			select_serial = 0;
+		else
+			select_serial = 1;
+	}
+	if (slurmctld_config.submissions_disabled || (select_serial == 1)) {
 		info("Submissions disabled on system");
 		error_code = ESLURM_SUBMISSIONS_DISABLED;
 	}
@@ -3929,6 +3943,7 @@ static void _slurm_rpc_submit_batch_pack_job(slurm_msg_t *msg)
 				jobid_hostset = hostset_create(tmp_str);
 			job_ptr->pack_job_id     = pack_job_id;
 			job_ptr->pack_job_offset = pack_job_offset++;
+			job_ptr->batch_flag      = 1;
 			list_append(submit_job_list, job_ptr);
 		}
 
-- 
GitLab