diff --git a/src/slurmd/slurmd/req.c b/src/slurmd/slurmd/req.c index b1d9666626faf2a03654d50b734b6f3d463a2f3a..8405e6322844289ff7b4d6a4fa95824512b41f65 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 a041ecd967105fea74793584245c87a926180738..eac93d1ac3cf5609ca75a00a363a1369226b2445 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 1d1b6c4669ab6ef734f35ca6e43abff4c10aff15..385667d99c9d90d9f673be840564205589e0b2b5 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 */