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