From ee205ed7249fe203b6acb2c48b2fb046736e6de9 Mon Sep 17 00:00:00 2001
From: Danny Auble <da@schedmd.com>
Date: Thu, 5 Mar 2015 14:06:58 -0800
Subject: [PATCH] Make it so sched_params isn't read over and over when a
 launch of a job fails

addition to commit 2c83bf4e1e830f
---
 src/slurmd/slurmd/req.c    | 17 +++++++++--------
 src/slurmd/slurmd/slurmd.c |  2 ++
 src/slurmd/slurmd/slurmd.h |  2 ++
 3 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/src/slurmd/slurmd/req.c b/src/slurmd/slurmd/req.c
index b1d9666626f..8405e632284 100644
--- a/src/slurmd/slurmd/req.c
+++ b/src/slurmd/slurmd/req.c
@@ -1804,15 +1804,16 @@ _launch_job_fail(uint32_t job_id, uint32_t slurm_rc)
 	struct requeue_msg req_msg;
 	slurm_msg_t resp_msg;
 	int rc;
-	char *sched_params;
-	char requeue_no_hold;
-
-	requeue_no_hold = false;
-	sched_params = slurm_get_sched_params();
-	if (sched_params) {
-		if (strstr(sched_params, "nohold_on_prolog_fail"))
-			requeue_no_hold = true;
+	static time_t config_update = 0;
+	static bool requeue_no_hold = false;
+
+	if (config_update != conf->last_update) {
+		char *sched_params = slurm_get_sched_params();
+		requeue_no_hold = (sched_params && strstr(
+					   sched_params,
+					   "nohold_on_prolog_fail"));
 		xfree(sched_params);
+		config_update = conf->last_update;
 	}
 
 	slurm_msg_t_init(&resp_msg);
diff --git a/src/slurmd/slurmd/slurmd.c b/src/slurmd/slurmd/slurmd.c
index a041ecd9671..eac93d1ac3c 100644
--- a/src/slurmd/slurmd/slurmd.c
+++ b/src/slurmd/slurmd/slurmd.c
@@ -776,6 +776,8 @@ _read_config(void)
 
 	conf->chos_loc = xstrdup(cf->chos_loc);
 
+	conf->last_update = time(NULL);
+
 	if (conf->conffile == NULL)
 		conf->conffile = xstrdup(cf->slurm_conf);
 
diff --git a/src/slurmd/slurmd/slurmd.h b/src/slurmd/slurmd/slurmd.h
index 1d1b6c4669a..385667d99c9 100644
--- a/src/slurmd/slurmd/slurmd.h
+++ b/src/slurmd/slurmd/slurmd.h
@@ -107,6 +107,8 @@ typedef struct slurmd_config {
 	uint16_t      cr_type;		/* Consumable Resource Type:       *
 					 * CR_SOCKET, CR_CORE, CR_MEMORY,  *
 					 * CR_DEFAULT, etc.                */
+	time_t        last_update;	/* last update time of the
+					 * build parameters */
 	uint16_t      mem_limit_enforce; /* enforce mem limit on running job */
 	int           nice;		/* command line nice value spec    */
 	char         *node_name;	/* node name                       */
-- 
GitLab