From 4ad1e215e712f64a986031a74cac090cf56f43ad Mon Sep 17 00:00:00 2001
From: Danny Auble <da@schedmd.com>
Date: Mon, 7 Oct 2019 14:07:38 -0600
Subject: [PATCH] Remove use_spec_resources variable from slurm_ctl_conf_t

This is now part of the conf_flags.

Bug 7496
---
 contribs/perlapi/libslurm/perl/conf.c        |  2 --
 slurm/slurm.h.in                             |  3 +--
 src/api/config_info.c                        |  5 +++--
 src/common/read_config.c                     | 10 +++++-----
 src/common/slurm_protocol_api.c              | 17 -----------------
 src/common/slurm_protocol_api.h              |  5 -----
 src/common/slurm_protocol_pack.c             | 14 ++++++++------
 src/plugins/select/cons_common/cons_common.c |  2 +-
 src/plugins/select/cons_common/job_test.c    |  2 +-
 src/slurmctld/job_mgr.c                      |  5 +++--
 src/slurmctld/proc_req.c                     |  1 -
 11 files changed, 22 insertions(+), 44 deletions(-)

diff --git a/contribs/perlapi/libslurm/perl/conf.c b/contribs/perlapi/libslurm/perl/conf.c
index 730aaf8010b..6c2bbb4430f 100644
--- a/contribs/perlapi/libslurm/perl/conf.c
+++ b/contribs/perlapi/libslurm/perl/conf.c
@@ -390,7 +390,6 @@ slurm_ctl_conf_to_hv(slurm_ctl_conf_t *conf, HV *hv)
 		STORE_FIELD(hv, conf, unkillable_program, charp);
 	STORE_FIELD(hv, conf, unkillable_timeout, uint16_t);
 	STORE_FIELD(hv, conf, use_pam, uint16_t);
-	STORE_FIELD(hv, conf, use_spec_resources, uint16_t);
 	if (conf->version)
 		STORE_FIELD(hv, conf, version, charp);
 	STORE_FIELD(hv, conf, vsize_factor, uint16_t);
@@ -631,7 +630,6 @@ hv_to_slurm_ctl_conf(HV *hv, slurm_ctl_conf_t *conf)
 	FETCH_FIELD(hv, conf, unkillable_program, charp, FALSE);
 	FETCH_FIELD(hv, conf, unkillable_timeout, uint16_t, TRUE);
 	FETCH_FIELD(hv, conf, use_pam, uint16_t, TRUE);
-	FETCH_FIELD(hv, conf, use_spec_resources, uint16_t, TRUE);
 	FETCH_FIELD(hv, conf, version, charp, FALSE);
 	FETCH_FIELD(hv, conf, vsize_factor, uint16_t, TRUE);
 	FETCH_FIELD(hv, conf, wait_time, uint16_t, TRUE);
diff --git a/slurm/slurm.h.in b/slurm/slurm.h.in
index e31136dfd9a..53c147d111d 100644
--- a/slurm/slurm.h.in
+++ b/slurm/slurm.h.in
@@ -2615,6 +2615,7 @@ typedef struct reservation_name_msg {
 #define CTL_CONF_OR             0x00000001 /*SlurmdParameters=config_overrides*/
 #define CTL_CONF_SJC            0x00000002 /* AccountingStoreJobComment */
 #define CTL_CONF_DRJ            0x00000004 /* DisableRootJobs */
+#define CTL_CONF_ASRU           0x00000008 /* AllowSpecResourcesUsage */
 
 #define LOG_FMT_ISO8601_MS      0
 #define LOG_FMT_ISO8601         1
@@ -2884,8 +2885,6 @@ typedef struct slurm_ctl_conf {
 				      * job step have been signaled, before
 				      * they are considered "unkillable". */
 	uint16_t use_pam;	/* enable/disable PAM support */
-	uint16_t use_spec_resources; /* enable/disable job control over
-				      * specialized resources */
 	char *version;		/* version of slurmctld */
 	uint16_t vsize_factor;	/* virtual memory limit size factor */
 	uint16_t wait_time;	/* default job --wait time */
diff --git a/src/api/config_info.c b/src/api/config_info.c
index 939395b1884..5358c991d98 100644
--- a/src/api/config_info.c
+++ b/src/api/config_info.c
@@ -585,8 +585,9 @@ extern void *slurm_ctl_conf_2_key_pairs (slurm_ctl_conf_t* slurm_ctl_conf_ptr)
 
 	key_pair = xmalloc(sizeof(config_key_pair_t));
 	key_pair->name = xstrdup("AllowSpecResourcesUsage");
-	key_pair->value = xstrdup_printf(
-		"%u", slurm_ctl_conf_ptr->use_spec_resources);
+	key_pair->value = xstrdup(
+		(slurm_ctl_conf_ptr->conf_flags & CTL_CONF_ASRU) ?
+		"Yes" : "No");
 	list_append(ret_list, key_pair);
 
 	key_pair = xmalloc(sizeof(config_key_pair_t));
diff --git a/src/common/read_config.c b/src/common/read_config.c
index a40d1ab7a78..da983878caa 100644
--- a/src/common/read_config.c
+++ b/src/common/read_config.c
@@ -2969,7 +2969,6 @@ init_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr)
 	xfree (ctl_conf_ptr->unkillable_program);
 	ctl_conf_ptr->unkillable_timeout        = NO_VAL16;
 	ctl_conf_ptr->use_pam			= 0;
-	ctl_conf_ptr->use_spec_resources	= 0;
 	ctl_conf_ptr->vsize_factor              = 0;
 	ctl_conf_ptr->wait_time			= NO_VAL16;
 	xfree (ctl_conf_ptr->x11_params);
@@ -3426,10 +3425,11 @@ _validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 			    "AcctGatherNodeFreq", hashtbl))
 		conf->acct_gather_node_freq = 0;
 
-	if (s_p_get_boolean(&truth, "AllowSpecResourcesUsage", hashtbl))
-		conf->use_spec_resources = truth;
-	else
-		conf->use_spec_resources = DEFAULT_ALLOW_SPEC_RESOURCE_USAGE;
+	if (s_p_get_boolean(&truth, "AllowSpecResourcesUsage", hashtbl)) {
+		if (truth)
+			conf->conf_flags |= CTL_CONF_ASRU;
+	} else if (DEFAULT_ALLOW_SPEC_RESOURCE_USAGE)
+		conf->conf_flags |= CTL_CONF_ASRU;
 
 	(void) s_p_get_string(&default_storage_type, "DefaultStorageType",
 			      hashtbl);
diff --git a/src/common/slurm_protocol_api.c b/src/common/slurm_protocol_api.c
index 60d470b5e8f..97d358b5fb9 100644
--- a/src/common/slurm_protocol_api.c
+++ b/src/common/slurm_protocol_api.c
@@ -1460,23 +1460,6 @@ extern uint16_t slurm_get_track_wckey(void)
 	return track_wckey;
 }
 
-/* slurm_get_use_spec_resources
- * returns the value of use_spec_resources in slurmctld_conf object
- */
-extern uint16_t slurm_get_use_spec_resources(void)
-{
-	uint16_t use_spec_val = 0;
-	slurm_ctl_conf_t *conf;
-
-	if (slurmdbd_conf) {
-	} else {
-		conf = slurm_conf_lock();
-		use_spec_val = conf->use_spec_resources;
-		slurm_conf_unlock();
-	}
-	return use_spec_val;
-}
-
 /* slurm_set_tree_width
  * sets the value of tree_width in slurmctld_conf object
  * RET 0 or error code
diff --git a/src/common/slurm_protocol_api.h b/src/common/slurm_protocol_api.h
index 46a6250017a..d518f6d6d5a 100644
--- a/src/common/slurm_protocol_api.h
+++ b/src/common/slurm_protocol_api.h
@@ -518,11 +518,6 @@ extern char *slurm_get_comm_parameters(void);
  */
 extern char *slurm_get_cred_type(void);
 
-/* slurm_get_use_spec_resources
- * returns the value of use_spec_resources in slurmctld_conf object
- */
-extern uint16_t slurm_get_use_spec_resources(void);
-
 /* slurm_get_power_parameters
  * returns the PowerParameters from slurmctld_conf object
  * RET char *    - PowerParameters, MUST be xfreed by caller
diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c
index e9d20635320..b4082661551 100644
--- a/src/common/slurm_protocol_pack.c
+++ b/src/common/slurm_protocol_pack.c
@@ -5959,7 +5959,6 @@ _pack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t * build_ptr, Buf buffer,
 		pack16(build_ptr->tree_width, buffer);
 
 		pack16(build_ptr->use_pam, buffer);
-		pack16(build_ptr->use_spec_resources, buffer);
 		packstr(build_ptr->unkillable_program, buffer);
 		pack16(build_ptr->unkillable_timeout, buffer);
 		packstr(build_ptr->version, buffer);
@@ -6255,7 +6254,7 @@ _pack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t * build_ptr, Buf buffer,
 		pack16(build_ptr->tree_width, buffer);
 
 		pack16(build_ptr->use_pam, buffer);
-		pack16(build_ptr->use_spec_resources, buffer);
+		pack16((build_ptr->conf_flags & CTL_CONF_ASRU) ? 1 : 0, buffer);
 		packstr(build_ptr->unkillable_program, buffer);
 		pack16(build_ptr->unkillable_timeout, buffer);
 		packstr(build_ptr->version, buffer);
@@ -6548,7 +6547,7 @@ _pack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t * build_ptr, Buf buffer,
 		pack16(build_ptr->tree_width, buffer);
 
 		pack16(build_ptr->use_pam, buffer);
-		pack16(build_ptr->use_spec_resources, buffer);
+		pack16((build_ptr->conf_flags & CTL_CONF_ASRU) ? 1 : 0, buffer);
 		packstr(build_ptr->unkillable_program, buffer);
 		pack16(build_ptr->unkillable_timeout, buffer);
 		packstr(build_ptr->version, buffer);
@@ -6966,7 +6965,6 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **build_buffer_ptr,
 		safe_unpack16(&build_ptr->tree_width, buffer);
 
 		safe_unpack16(&build_ptr->use_pam, buffer);
-		safe_unpack16(&build_ptr->use_spec_resources, buffer);
 		safe_unpackstr_xmalloc(&build_ptr->unkillable_program,
 				       &uint32_tmp, buffer);
 		safe_unpack16(&build_ptr->unkillable_timeout, buffer);
@@ -7370,7 +7368,9 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **build_buffer_ptr,
 		safe_unpack16(&build_ptr->tree_width, buffer);
 
 		safe_unpack16(&build_ptr->use_pam, buffer);
-		safe_unpack16(&build_ptr->use_spec_resources, buffer);
+		safe_unpack16(&uint16_tmp, buffer);
+		if (uint16_tmp == 1)
+			build_ptr->conf_flags |= CTL_CONF_ASRU;
 		safe_unpackstr_xmalloc(&build_ptr->unkillable_program,
 				       &uint32_tmp, buffer);
 		safe_unpack16(&build_ptr->unkillable_timeout, buffer);
@@ -7769,7 +7769,9 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t **build_buffer_ptr,
 		safe_unpack16(&build_ptr->tree_width, buffer);
 
 		safe_unpack16(&build_ptr->use_pam, buffer);
-		safe_unpack16(&build_ptr->use_spec_resources, buffer);
+		safe_unpack16(&uint16_tmp, buffer);
+		if (uint16_tmp == 1)
+			build_ptr->conf_flags |= CTL_CONF_ASRU;
 		safe_unpackstr_xmalloc(&build_ptr->unkillable_program,
 				       &uint32_tmp, buffer);
 		safe_unpack16(&build_ptr->unkillable_timeout, buffer);
diff --git a/src/plugins/select/cons_common/cons_common.c b/src/plugins/select/cons_common/cons_common.c
index 0e6de468f76..aed4355fad2 100644
--- a/src/plugins/select/cons_common/cons_common.c
+++ b/src/plugins/select/cons_common/cons_common.c
@@ -777,7 +777,7 @@ extern bitstr_t **common_mark_avail_cores(
 	int rem_core_spec, node_core_spec, thread_spec = 0;
 	struct node_record *node_ptr;
 	bitstr_t *core_map = NULL;
-	uint16_t use_spec_cores = slurm_get_use_spec_resources();
+	uint16_t use_spec_cores = slurmctld_conf.conf_flags & CTL_CONF_ASRU;
 	node_res_record_t *node_res_ptr = NULL;
 	uint32_t coff;
 
diff --git a/src/plugins/select/cons_common/job_test.c b/src/plugins/select/cons_common/job_test.c
index b594d8766d5..d18123643fa 100644
--- a/src/plugins/select/cons_common/job_test.c
+++ b/src/plugins/select/cons_common/job_test.c
@@ -2200,7 +2200,7 @@ extern int common_job_test(struct job_record *job_ptr, bitstr_t *node_bitmap,
 	uint16_t job_node_req;
 	char tmp[128];
 
-	if (slurm_get_use_spec_resources() == 0)
+	if (!(slurmctld_conf.conf_flags & CTL_CONF_ASRU))
 		job_ptr->details->core_spec = NO_VAL16;
 	if ((job_ptr->details->core_spec != NO_VAL16) &&
 	    (job_ptr->details->whole_node != 1)) {
diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c
index 9174ab74641..0a0d73222c3 100644
--- a/src/slurmctld/job_mgr.c
+++ b/src/slurmctld/job_mgr.c
@@ -7893,7 +7893,7 @@ _copy_job_desc_to_job_record(job_desc_msg_t * job_desc,
 	}
 	if (job_desc->contiguous != NO_VAL16)
 		detail_ptr->contiguous = job_desc->contiguous;
-	if (slurm_get_use_spec_resources())
+	if (slurmctld_conf.conf_flags & CTL_CONF_ASRU)
 		detail_ptr->core_spec = job_desc->core_spec;
 	else
 		detail_ptr->core_spec = NO_VAL16;
@@ -12568,7 +12568,8 @@ static int _update_job(struct job_record *job_ptr, job_desc_msg_t * job_specs,
 	if (job_specs->core_spec != NO_VAL16) {
 		if ((!IS_JOB_PENDING(job_ptr)) || (detail_ptr == NULL))
 			error_code = ESLURM_JOB_NOT_PENDING;
-		else if (operator && slurm_get_use_spec_resources()) {
+		else if (operator &&
+			 (slurmctld_conf.conf_flags & CTL_CONF_ASRU)) {
 			if (job_specs->core_spec == INFINITE16)
 				detail_ptr->core_spec = NO_VAL16;
 			else
diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c
index f5b475b09bf..f10f4fdc5f4 100644
--- a/src/slurmctld/proc_req.c
+++ b/src/slurmctld/proc_req.c
@@ -968,7 +968,6 @@ static void _fill_ctld_conf(slurm_ctl_conf_t * conf_ptr)
 	conf_ptr->wait_time           = conf->wait_time;
 
 	conf_ptr->use_pam             = conf->use_pam;
-	conf_ptr->use_spec_resources  = conf->use_spec_resources;
 	conf_ptr->unkillable_program  = xstrdup(conf->unkillable_program);
 	conf_ptr->unkillable_timeout  = conf->unkillable_timeout;
 	conf_ptr->version             = xstrdup(SLURM_VERSION_STRING);
-- 
GitLab