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