From ebc87ed21c986ad363ada275e1f6de714094d739 Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Mon, 23 Aug 2004 20:12:04 +0000
Subject: [PATCH] Note how to clear job and partition fields. In particular a
 job's RequiredNodeList, Dependency, or Features. or to clear Noodes and
 AllowGroups for a partition. (gnats:481)

---
 src/slurmctld/job_mgr.c       | 24 +++++++++++++++---------
 src/slurmctld/partition_mgr.c | 26 ++++++++++++++++++--------
 2 files changed, 33 insertions(+), 17 deletions(-)

diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c
index 86d4d3e27c8..8107c4738d1 100644
--- a/src/slurmctld/job_mgr.c
+++ b/src/slurmctld/job_mgr.c
@@ -2952,11 +2952,13 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid)
 	if (job_specs->features && detail_ptr) {
 		if (super_user) {
 			xfree(detail_ptr->features);
-			detail_ptr->features = job_specs->features;
-			info("update_job: setting features to %s for "
-				"job_id %u", job_specs->features, 
-				job_specs->job_id);
-			job_specs->features = NULL;
+			if (job_specs->features[0] != '\0') {
+				detail_ptr->features = job_specs->features;
+				job_specs->features = NULL;
+				info("update_job: setting features to %s for "
+					"job_id %u", job_specs->features, 
+					job_specs->job_id);
+			}
 		} else {
 			error("Attempt to change features for job %u",
 				job_specs->job_id);
@@ -2981,7 +2983,6 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid)
 			info("update_job: setting partition to %s for "
 				"job_id %u", job_specs->partition, 
 				job_specs->job_id);
-			job_specs->partition = NULL;
 		} else {
 			error("Attempt to change partition for job %u",
 				job_specs->job_id);
@@ -2990,7 +2991,10 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid)
 	}
 
 	if (job_specs->req_nodes && detail_ptr) {
-		if (super_user) {
+		if (job_specs->req_nodes[0] == '\0') {
+			xfree(detail_ptr->req_nodes);
+			FREE_NULL_BITMAP(detail_ptr->req_node_bitmap);
+		} else if (super_user) {
 			if (node_name2bitmap(job_specs->req_nodes, false, 
 						&req_bitmap)) {
 				error("Invalid node list for job_update: %s",
@@ -3019,8 +3023,10 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid)
 
 	if (job_specs->account) {
 		xfree(job_ptr->account);
-		job_ptr->account = xstrdup(job_specs->account);
-		job_specs->account = NULL;
+		if (job_specs->account[0] != '\0') {
+			job_ptr->account = job_specs->account ;
+			job_specs->account = NULL;
+		}
 	}
 
 	if (job_specs->dependency != NO_VAL) {
diff --git a/src/slurmctld/partition_mgr.c b/src/slurmctld/partition_mgr.c
index 2abd84493d9..c13f82bdb23 100644
--- a/src/slurmctld/partition_mgr.c
+++ b/src/slurmctld/partition_mgr.c
@@ -776,18 +776,28 @@ int update_part(update_part_msg_t * part_desc)
 
 	if (part_desc->allow_groups != NULL) {
 		xfree(part_ptr->allow_groups);
-		part_ptr->allow_groups = xstrdup(part_desc->allow_groups);
-		info("update_part: setting allow_groups to %s for partition %s", 
-		     part_desc->allow_groups, part_desc->name);
 		xfree(part_ptr->allow_uids);
-		part_ptr->allow_uids =
-		    _get_groups_members(part_desc->allow_groups);
+		if ((strcasecmp(part_desc->allow_groups, "ALL") == 0) ||
+		    (part_desc->allow_groups[0] == '\0')) {
+			info("update_part: setting allow_groups to ALL for partition %s", 
+				part_desc->name);
+		} else {
+			part_ptr->allow_groups = part_desc->allow_groups;
+			part_desc->allow_groups = NULL;
+			info("update_part: setting allow_groups to %s for partition %s", 
+				part_ptr->allow_groups, part_desc->name);
+			part_ptr->allow_uids =
+				_get_groups_members(part_ptr->allow_groups);
+		}
 	}
 
 	if (part_desc->nodes != NULL) {
-		char *backup_node_list;
-		backup_node_list = part_ptr->nodes;
-		part_ptr->nodes = xstrdup(part_desc->nodes);
+		char *backup_node_list = part_ptr->nodes;
+
+		if (part_desc->nodes[0] == '\0')
+			part_ptr->nodes = NULL;	/* avoid empty string */
+		else
+			part_ptr->nodes = xstrdup(part_desc->nodes);
 
 		error_code = _build_part_bitmap(part_ptr);
 		if (error_code) {
-- 
GitLab