From 680f0d9a91d68220141353ca18adb27a518a81f1 Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Mon, 21 Apr 2008 20:59:39 +0000
Subject: [PATCH] reset start_time of pending jobs to zero after will_run logic
 completes

---
 src/plugins/sched/wiki2/job_will_run.c | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/src/plugins/sched/wiki2/job_will_run.c b/src/plugins/sched/wiki2/job_will_run.c
index df95688d267..6cf1cec7d95 100644
--- a/src/plugins/sched/wiki2/job_will_run.c
+++ b/src/plugins/sched/wiki2/job_will_run.c
@@ -156,6 +156,7 @@ static char *	_will_run_test(uint32_t *jobid, time_t *start_time,
 	int i, rc;
 	select_will_run_t *select_will_run = NULL;
 	List select_list;
+	ListIterator iter;
 
 	select_list = list_create(_select_list_del);
 	if (select_list == NULL)
@@ -178,8 +179,6 @@ static char *	_will_run_test(uint32_t *jobid, time_t *start_time,
 			break;
 		}
 
-		job_ptr->start_time = start_time[i];
-
 		part_ptr = job_ptr->part_ptr;
 		if (part_ptr == NULL) {
 			*err_code = -700;
@@ -260,6 +259,7 @@ static char *	_will_run_test(uint32_t *jobid, time_t *start_time,
 		select_will_run->avail_nodes = avail_bitmap;
 		avail_bitmap = NULL;
 		select_will_run->job_ptr     = job_ptr;
+		job_ptr->start_time          = start_time[i];
 		select_will_run->max_nodes   = max_nodes;
 		select_will_run->min_nodes   = min_nodes;
 		select_will_run->req_nodes   = req_nodes;
@@ -267,6 +267,13 @@ static char *	_will_run_test(uint32_t *jobid, time_t *start_time,
 	}
 	FREE_NULL_BITMAP(avail_bitmap);
 	if (i < job_cnt) {	/* error logged above */
+		/* Restore pending job start time */
+		iter = list_iterator_create(select_list);
+		if (iter == NULL)
+			fatal("list_iterator_create: malloc failure");
+		while ((select_will_run = list_next(iter)))
+			select_will_run->job_ptr->start_time = 0;
+		list_iterator_destroy(iter);
 		list_destroy(select_list);
 		return NULL;
 	}
@@ -285,7 +292,6 @@ static char *	_will_run_test(uint32_t *jobid, time_t *start_time,
 
 	if (rc == SLURM_SUCCESS) {
 		char tmp_str[128];
-		ListIterator iter;
 		*err_code = 0;
 		uint32_t proc_cnt = 0;
 
@@ -316,6 +322,8 @@ static char *	_will_run_test(uint32_t *jobid, time_t *start_time,
 				 proc_cnt,
 				 (uint32_t) select_will_run->
 					    job_ptr->start_time);
+			/* Restore pending job start time */
+			select_will_run->job_ptr->start_time = 0;
 			xstrcat(reply_msg, tmp_str);
 			hostlist = bitmap2node_name(select_will_run->
 						    avail_nodes);
@@ -324,6 +332,13 @@ static char *	_will_run_test(uint32_t *jobid, time_t *start_time,
 		}
 		list_iterator_destroy(iter);
 	} else {
+		/* Restore pending job start times */
+		iter = list_iterator_create(select_list);
+		if (iter == NULL)
+			fatal("list_iterator_create: malloc failure");
+		while ((select_will_run = list_next(iter)))
+			select_will_run->job_ptr->start_time = 0;
+		list_iterator_destroy(iter);
 		xstrcat(reply_msg, "Jobs not runable on selected nodes");
 		error("wiki: jobs not runnable on nodes");
 	}
-- 
GitLab