From d46c7607d374eb36bf64fac74ed17d922b3df2fe Mon Sep 17 00:00:00 2001
From: Morris Jette <jette@schedmd.com>
Date: Thu, 6 Dec 2012 12:23:07 -0800
Subject: [PATCH] Reject job at submit tie if it can not run now due to
 reservation and can never run

Previously the job would be accepted at job submit time if nodes
required for its use (e.g. in a required node list or the node
count) could not be satisfied at submit time due to an advanced
reservation. Bug #187
---
 src/slurmctld/node_scheduler.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/slurmctld/node_scheduler.c b/src/slurmctld/node_scheduler.c
index d1ae5c78458..d906b983118 100644
--- a/src/slurmctld/node_scheduler.c
+++ b/src/slurmctld/node_scheduler.c
@@ -647,16 +647,18 @@ _get_req_features(struct node_set *node_set_ptr, int node_set_size,
 		time_t start_res = time(NULL);
 		rc = job_test_resv(job_ptr, &start_res, false, &resv_bitmap,
 				   &exc_core_bitmap);
-		if ((rc != SLURM_SUCCESS) ||
-		    (bit_set_count(resv_bitmap) < min_nodes) ||
-		    (job_ptr->details->req_node_bitmap &&
-		     (!bit_super_set(job_ptr->details->req_node_bitmap,
-				     resv_bitmap)))) {
+		if (rc == ESLURM_NODES_BUSY) {
+			save_avail_node_bitmap = avail_node_bitmap;
+			avail_node_bitmap = bit_alloc(node_record_count);
+			FREE_NULL_BITMAP(resv_bitmap);
+			/* Continue executing through _pick_best_nodes() below
+			 * in order reject job if it can never run */
+		} else if (rc != SLURM_SUCCESS) {
 			FREE_NULL_BITMAP(resv_bitmap);
+			FREE_NULL_BITMAP(exc_core_bitmap);
 			return ESLURM_NODES_BUSY;	/* reserved */
-		}
-		if (resv_bitmap &&
-		    (!bit_equal(resv_bitmap, avail_node_bitmap))) {
+		} else if (resv_bitmap &&
+			   (!bit_equal(resv_bitmap, avail_node_bitmap))) {
 			bit_and(resv_bitmap, avail_node_bitmap);
 			save_avail_node_bitmap = avail_node_bitmap;
 			avail_node_bitmap = resv_bitmap;
-- 
GitLab