From a9dc0097c86c087354a6e36d0352e000730ddb35 Mon Sep 17 00:00:00 2001
From: Morris Jette <jette@schedmd.com>
Date: Tue, 8 Sep 2015 10:01:10 -0700
Subject: [PATCH] backport of commit 2ae6643533d40611168661ea4aaa080a535cdaf8

bug 1920
---
 src/slurmctld/node_scheduler.c | 36 +++++++++++++++++++++++++++++-----
 1 file changed, 31 insertions(+), 5 deletions(-)

diff --git a/src/slurmctld/node_scheduler.c b/src/slurmctld/node_scheduler.c
index 69c76a5e0da..58e252ed7e3 100644
--- a/src/slurmctld/node_scheduler.c
+++ b/src/slurmctld/node_scheduler.c
@@ -1786,17 +1786,43 @@ extern int select_nodes(struct job_record *job_ptr, bool test_only,
 		/* Non-fatal errors for job below */
 		} else if (error_code == ESLURM_NODE_NOT_AVAIL) {
 			/* Required nodes are down or drained */
+			char *node_str = NULL, *unavail_node = NULL;
 			debug3("JobId=%u required nodes not avail",
 			       job_ptr->job_id);
 			job_ptr->state_reason = WAIT_NODE_NOT_AVAIL;
 			xfree(job_ptr->state_desc);
-			xstrfmtcat(job_ptr->state_desc,
-				   "ReqNodeNotAvail, May be reserved for other job");
-			if (unavail_node_str) {
+			if (unavail_node_str) {	/* Set in few cases */
+				node_str = unavail_node_str;
+			} else {
+				bitstr_t *unavail_bitmap;
+				unavail_bitmap = bit_copy(avail_node_bitmap);
+				bit_not(unavail_bitmap);
+				if (job_ptr->details  &&
+				    job_ptr->details->req_node_bitmap &&
+				    bit_overlap(unavail_bitmap,
+					   job_ptr->details->req_node_bitmap)) {
+					bit_and(unavail_bitmap,
+						job_ptr->details->
+						req_node_bitmap);
+				}
+				if (bit_ffs(unavail_bitmap) != -1) {
+					unavail_node = bitmap2node_name(
+								unavail_bitmap);
+					node_str = unavail_node;
+				}
+				FREE_NULL_BITMAP(unavail_bitmap);
+			}
+			if (node_str) {
+				xstrfmtcat(job_ptr->state_desc,
+					   "ReqNodeNotAvail, "
+					   "UnavailableNodes:%s",
+					   node_str);
+			} else {
 				xstrfmtcat(job_ptr->state_desc,
-					   ", UnavailableNodes:%s",
-					   unavail_node_str);
+					   "ReqNodeNotAvail, May be reserved "
+					   "for other job");
 			}
+			xfree(unavail_node);	
 			last_job_update = now;
 		} else if ((error_code == ESLURM_RESERVATION_NOT_USABLE) ||
 			   (error_code == ESLURM_RESERVATION_BUSY)) {
-- 
GitLab