From ebcbf29eb7a377eb63be136529e4618b10346773 Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Tue, 15 Jan 2008 16:51:05 +0000 Subject: [PATCH] Support job, node and partition names of arbitrary size. --- NEWS | 1 + src/plugins/jobcomp/filetxt/jobcomp_filetxt.c | 2 +- src/plugins/sched/wiki/job_modify.c | 4 +- src/plugins/sched/wiki2/job_modify.c | 14 ++-- src/slurmctld/job_mgr.c | 64 +++++++++++-------- src/slurmctld/node_mgr.c | 25 +++++--- src/slurmctld/partition_mgr.c | 39 ++++++----- src/slurmctld/read_config.c | 28 ++++---- src/slurmctld/slurmctld.h | 13 ++-- 9 files changed, 105 insertions(+), 85 deletions(-) diff --git a/NEWS b/NEWS index 301ad9c3eb4..855f762189f 100644 --- a/NEWS +++ b/NEWS @@ -27,6 +27,7 @@ documents those changes that are of interest to users and admins. SelectTypeParameter=CR_Memory in slurm.conf. -- BLUEGENE: Reorganized bluegene plugin for maintainability sake. -- Major restructuring of data structures in select/cons_res. + -- Support job, node and partition names of arbitrary size. * Changes in SLURM 1.3.0-pre7 ============================= diff --git a/src/plugins/jobcomp/filetxt/jobcomp_filetxt.c b/src/plugins/jobcomp/filetxt/jobcomp_filetxt.c index b9415f2d5fb..7b033e7e8fd 100644 --- a/src/plugins/jobcomp/filetxt/jobcomp_filetxt.c +++ b/src/plugins/jobcomp/filetxt/jobcomp_filetxt.c @@ -222,7 +222,7 @@ extern int slurm_jobcomp_set_location ( char * location ) extern int slurm_jobcomp_log_record ( struct job_record *job_ptr ) { int rc = SLURM_SUCCESS; - char job_rec[512+MAX_JOBNAME_LEN]; + char job_rec[1024]; char usr_str[32], grp_str[32], start_str[32], end_str[32], lim_str[32]; char select_buf[128]; size_t offset = 0, tot_size, wrote; diff --git a/src/plugins/sched/wiki/job_modify.c b/src/plugins/sched/wiki/job_modify.c index 72030e90aea..35486df2561 100644 --- a/src/plugins/sched/wiki/job_modify.c +++ b/src/plugins/sched/wiki/job_modify.c @@ -165,11 +165,11 @@ host_fini: if (rc) { } info("wiki: change job %u partition %s", jobid, part_name_ptr); - strncpy(job_ptr->partition, part_name_ptr, MAX_SLURM_NAME); + xfree(job_ptr->partition); + job_ptr->partition = xstrdup(part_name_ptr); job_ptr->part_ptr = part_ptr; last_job_update = time(NULL); } - if (new_node_cnt) { if (IS_JOB_PENDING(job_ptr) && job_ptr->details) { job_ptr->details->min_nodes = new_node_cnt; diff --git a/src/plugins/sched/wiki2/job_modify.c b/src/plugins/sched/wiki2/job_modify.c index ac7b2218a8a..25e1b1aaf86 100644 --- a/src/plugins/sched/wiki2/job_modify.c +++ b/src/plugins/sched/wiki2/job_modify.c @@ -122,7 +122,8 @@ static int _job_modify(uint32_t jobid, char *bank_ptr, if (name_ptr) { info("wiki: change job %u name %s", jobid, name_ptr); - strncpy(job_ptr->name, name_ptr, sizeof(job_ptr->name)); + xfree(job_ptr->name); + job_ptr->name = xstrdup(name_ptr); last_job_update = now; } @@ -192,7 +193,8 @@ host_fini: if (rc) { } info("wiki: change job %u partition %s", jobid, part_name_ptr); - strncpy(job_ptr->partition, part_name_ptr, MAX_SLURM_NAME); + xfree(job_ptr->partition); + job_ptr->partition = xstrdup(part_name_ptr); job_ptr->part_ptr = part_ptr; last_job_update = now; } @@ -278,7 +280,7 @@ extern int job_modify_wiki(char *cmd_ptr, int *err_code, char **err_msg) name_ptr += 8; if (name_ptr[0] == '\"') { name_ptr++; - for (i=0; i<MAX_JOBNAME_LEN; i++) { + for (i=0; ; i++) { if (name_ptr[i] == '\0') break; if (name_ptr[i] == '\"') { @@ -286,11 +288,9 @@ extern int job_modify_wiki(char *cmd_ptr, int *err_code, char **err_msg) break; } } - if (i == MAX_JOBNAME_LEN) - name_ptr[i-1] = '\0'; } else if (name_ptr[0] == '\'') { name_ptr++; - for (i=0; i<MAX_JOBNAME_LEN; i++) { + for (i=0; ; i++) { if (name_ptr[i] == '\0') break; if (name_ptr[i] == '\'') { @@ -298,8 +298,6 @@ extern int job_modify_wiki(char *cmd_ptr, int *err_code, char **err_msg) break; } } - if (i == MAX_JOBNAME_LEN) - name_ptr[i-1] = '\0'; } else null_term(name_ptr); } diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c index ebfd4e1a48f..e9b8abd4e7a 100644 --- a/src/slurmctld/job_mgr.c +++ b/src/slurmctld/job_mgr.c @@ -666,8 +666,8 @@ static int _load_job_state(Buf buffer) job_ptr->total_procs = total_procs; job_ptr->db_index = db_index; job_ptr->time_last_active = time(NULL); - strncpy(job_ptr->name, name, MAX_JOBNAME_LEN); - xfree(name); + job_ptr->name = name; + name = NULL; /* reused, nothing left to free */ xfree(job_ptr->nodes); job_ptr->nodes = nodes; nodes = NULL; /* reused, nothing left to free */ @@ -679,8 +679,8 @@ static int _load_job_state(Buf buffer) xfree(job_ptr->alloc_node); job_ptr->alloc_node = alloc_node; alloc_node = NULL; /* reused, nothing left to free */ - strncpy(job_ptr->partition, partition, MAX_SLURM_NAME); - xfree(partition); + job_ptr->partition = partition; + partition = NULL; /* reused, nothing left to free */ job_ptr->account = account; account = NULL; /* reused, nothing left to free */ job_ptr->comment = comment; @@ -2028,27 +2028,27 @@ static int _validate_job_create_req(job_desc_msg_t * job_desc) { if (job_desc->account && (strlen(job_desc->account) > MAX_STR_LEN)) { info("_validate_job_create_req: strlen(account) too big (%d)", - strlen(job_desc->features)); + strlen(job_desc->account)); return ESLURM_PATHNAME_TOO_LONG; } if (job_desc->alloc_node && (strlen(job_desc->alloc_node) > MAX_STR_LEN)) { info("_validate_job_create_req: strlen(alloc_node) too big (%d)", - strlen(job_desc->features)); - return ESLURM_PATHNAME_TOO_LONG; - } - if (job_desc->comment && (strlen(job_desc->comment) > MAX_STR_LEN)) { - info("_validate_job_create_req: strlen(comment) too big (%d)", - strlen(job_desc->features)); + strlen(job_desc->alloc_node)); return ESLURM_PATHNAME_TOO_LONG; } if (job_desc->blrtsimage && (strlen(job_desc->blrtsimage) > MAX_STR_LEN)) { info("_validate_job_create_req: strlen(blrtsimage) too big (%d)", - strlen(job_desc->features)); + strlen(job_desc->blrtsimage)); + return ESLURM_PATHNAME_TOO_LONG; + } + if (job_desc->comment && (strlen(job_desc->comment) > MAX_STR_LEN)) { + info("_validate_job_create_req: strlen(comment) too big (%d)", + strlen(job_desc->comment)); return ESLURM_PATHNAME_TOO_LONG; } if (job_desc->dependency && (strlen(job_desc->dependency) > MAX_STR_LEN)) { info("_validate_job_create_req: strlen(dependency) too big (%d)", - strlen(job_desc->features)); + strlen(job_desc->dependency)); return ESLURM_PATHNAME_TOO_LONG; } if (job_desc->err && (strlen(job_desc->err) > MAX_STR_LEN)) { @@ -2068,12 +2068,12 @@ static int _validate_job_create_req(job_desc_msg_t * job_desc) } if (job_desc->linuximage && (strlen(job_desc->linuximage) > MAX_STR_LEN)) { info("_validate_job_create_req: strlen(linuximage) too big (%d)", - strlen(job_desc->features)); + strlen(job_desc->linuximage)); return ESLURM_PATHNAME_TOO_LONG; } if (job_desc->mail_user && (strlen(job_desc->mail_user) > MAX_STR_LEN)) { info("_validate_job_create_req: strlen(mail_user) too big (%d)", - strlen(job_desc->in)); + strlen(job_desc->mail_user)); return ESLURM_PATHNAME_TOO_LONG; } if (job_desc->mloaderimage && (strlen(job_desc->mloaderimage) > MAX_STR_LEN)) { @@ -2081,9 +2081,14 @@ static int _validate_job_create_req(job_desc_msg_t * job_desc) strlen(job_desc->features)); return ESLURM_PATHNAME_TOO_LONG; } + if (job_desc->name && (strlen(job_desc->name) > MAX_STR_LEN)) { + info("_validate_job_create_req: strlen(name) too big (%d)", + strlen(job_desc->name)); + return ESLURM_PATHNAME_TOO_LONG; + } if (job_desc->network && (strlen(job_desc->network) > MAX_STR_LEN)) { info("_validate_job_create_req: strlen(network) too big (%d)", - strlen(job_desc->features)); + strlen(job_desc->network)); return ESLURM_PATHNAME_TOO_LONG; } if (job_desc->out && (strlen(job_desc->out) > MAX_STR_LEN)) { @@ -2091,9 +2096,14 @@ static int _validate_job_create_req(job_desc_msg_t * job_desc) strlen(job_desc->out)); return ESLURM_PATHNAME_TOO_LONG; } + if (job_desc->partition && (strlen(job_desc->partition) > MAX_STR_LEN)) { + info("_validate_job_create_req: strlen(partition) too big (%d)", + strlen(job_desc->partition)); + return ESLURM_PATHNAME_TOO_LONG; + } if (job_desc->ramdiskimage && (strlen(job_desc->ramdiskimage) > MAX_STR_LEN)) { info("_validate_job_create_req: strlen(ramdiskimage) too big (%d)", - strlen(job_desc->features)); + strlen(job_desc->ramdiskimage)); return ESLURM_PATHNAME_TOO_LONG; } if (job_desc->work_dir && (strlen(job_desc->work_dir) > MAX_STR_LEN)) { @@ -2493,7 +2503,7 @@ _copy_job_desc_to_job_record(job_desc_msg_t * job_desc, if (error_code) return error_code; - strncpy(job_ptr->partition, part_ptr->name, MAX_SLURM_NAME); + job_ptr->partition = xstrdup(part_ptr->name); job_ptr->part_ptr = part_ptr; if (job_desc->job_id != NO_VAL) /* already confirmed unique */ job_ptr->job_id = job_desc->job_id; @@ -2501,9 +2511,8 @@ _copy_job_desc_to_job_record(job_desc_msg_t * job_desc, _set_job_id(job_ptr); _add_job_hash(job_ptr); - if (job_desc->name) { - strncpy(job_ptr->name, job_desc->name, MAX_JOBNAME_LEN); - } + if (job_desc->name) + job_ptr->name = xstrdup(job_desc->name); job_ptr->user_id = (uid_t) job_desc->user_id; job_ptr->group_id = (gid_t) job_desc->group_id; job_ptr->job_state = JOB_PENDING; @@ -2735,10 +2744,6 @@ static int _validate_job_desc(job_desc_msg_t * job_desc_msg, int allocate, debug("_validate_job_desc: job failed to specify group"); job_desc_msg->group_id = 0; /* uses user default */ } - if ((job_desc_msg->name) && - (strlen(job_desc_msg->name) >= MAX_JOBNAME_LEN)) { - job_desc_msg->name[MAX_JOBNAME_LEN-1] = '\0'; - } if (job_desc_msg->contiguous == (uint16_t) NO_VAL) job_desc_msg->contiguous = 0; @@ -2846,9 +2851,11 @@ static void _list_delete_job(void *job_entry) delete_job_details(job_ptr); xfree(job_ptr->alloc_node); + xfree(job_ptr->name); xfree(job_ptr->nodes); xfree(job_ptr->nodes_completing); FREE_NULL_BITMAP(job_ptr->node_bitmap); + xfree(job_ptr->partition); xfree(job_ptr->cpus_per_node); xfree(job_ptr->cpu_count_reps); xfree(job_ptr->node_addr); @@ -3776,7 +3783,8 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid) } if (job_specs->name) { - strncpy(job_ptr->name, job_specs->name, MAX_JOBNAME_LEN); + xfree(job_ptr->name); + job_ptr->name = xstrdup(job_specs->name); info("update_job: setting name to %s for job_id %u", job_specs->name, job_specs->job_id); } @@ -3788,8 +3796,8 @@ int update_job(job_desc_msg_t * job_specs, uid_t uid) else if (tmp_part_ptr == NULL) error_code = ESLURM_INVALID_PARTITION_NAME; else if (super_user) { - strncpy(job_ptr->partition, job_specs->partition, - MAX_SLURM_NAME); + xfree(job_ptr->partition); + job_ptr->partition = xstrdup(job_specs->partition); job_ptr->part_ptr = tmp_part_ptr; info("update_job: setting partition to %s for " "job_id %u", job_specs->partition, diff --git a/src/slurmctld/node_mgr.c b/src/slurmctld/node_mgr.c index 799becfe0fb..c7a94e4e2a8 100644 --- a/src/slurmctld/node_mgr.c +++ b/src/slurmctld/node_mgr.c @@ -186,7 +186,6 @@ create_node_record (struct config_record *config_ptr, char *node_name) last_node_update = time (NULL); xassert(config_ptr); xassert(node_name); - xassert(strlen (node_name) < MAX_SLURM_NAME); /* round up the buffer size to reduce overhead of xrealloc */ old_buffer_size = (node_record_count) * sizeof (struct node_record); @@ -202,7 +201,7 @@ create_node_record (struct config_record *config_ptr, char *node_name) else if (old_buffer_size != new_buffer_size) xrealloc (node_record_table_ptr, new_buffer_size); node_ptr = node_record_table_ptr + (node_record_count++); - strcpy (node_ptr->name, node_name); + node_ptr->name = xstrdup(node_name); node_ptr->last_response = (time_t)0; node_ptr->config_ptr = config_ptr; node_ptr->part_cnt = 0; @@ -648,6 +647,8 @@ int init_node_conf (void) int i; for (i=0; i<node_record_count; i++) { + xfree(node_record_table_ptr[i].name); + xfree(node_record_table_ptr[i].comm_name); xfree(node_record_table_ptr[i].features); xfree(node_record_table_ptr[i].reason); } @@ -838,6 +839,9 @@ extern void pack_all_node (char **buffer_ptr, int *buffer_size, if (((show_flags & SHOW_ALL) == 0) && (_node_is_hidden(node_ptr))) continue; + if ((node_ptr->name == NULL) || + (node_ptr->name[0] == '\0')) + continue; _pack_node(node_ptr, cr_flag, buffer); nodes_packed ++ ; @@ -924,17 +928,19 @@ static void _pack_node (struct node_record *dump_node_ptr, bool cr_flag, void rehash_node (void) { int i, inx; + struct node_record *node_ptr = node_record_table_ptr; xfree (node_hash_table); node_hash_table = xmalloc (sizeof (struct node_record *) * node_record_count); - for (i = 0; i < node_record_count; i++) { - if (strlen (node_record_table_ptr[i].name) == 0) + for (i = 0; i < node_record_count; i++, node_ptr++) { + if ((node_ptr->name == NULL) || + (node_ptr->name[0] == '\0')) continue; /* vestigial record */ - inx = _hash_index (node_record_table_ptr[i].name); - node_record_table_ptr[i].node_next = node_hash_table[inx]; - node_hash_table[inx] = &node_record_table_ptr[i]; + inx = _hash_index (node_ptr->name); + node_ptr->node_next = node_hash_table[inx]; + node_hash_table[inx] = node_ptr; } #if _DEBUG @@ -957,7 +963,8 @@ void set_slurmd_addr (void) START_TIMER; for (i = 0; i < node_record_count; i++, node_ptr++) { - if (node_ptr->name[0] == '\0') + if ((node_ptr->name == NULL) || + (node_ptr->name[0] == '\0')) continue; if (node_ptr->port == 0) node_ptr->port = slurmctld_conf.slurmd_port; @@ -2274,6 +2281,8 @@ void node_fini(void) } for (i=0; i< node_record_count; i++) { + xfree(node_record_table_ptr[i].name); + xfree(node_record_table_ptr[i].comm_name); xfree(node_record_table_ptr[i].part_pptr); xfree(node_record_table_ptr[i].features); xfree(node_record_table_ptr[i].reason); diff --git a/src/slurmctld/partition_mgr.c b/src/slurmctld/partition_mgr.c index 373f1f1634a..f1054f4ec85 100644 --- a/src/slurmctld/partition_mgr.c +++ b/src/slurmctld/partition_mgr.c @@ -71,7 +71,7 @@ /* Global variables */ struct part_record default_part; /* default configuration values */ List part_list = NULL; /* partition list */ -char default_part_name[MAX_SLURM_NAME]; /* name of default partition */ +char *default_part_name = NULL; /* name of default partition */ struct part_record *default_part_loc = NULL; /* default partition location */ time_t last_part_update; /* time of last update to partition records */ @@ -217,7 +217,7 @@ struct part_record *create_part_record(void) (struct part_record *) xmalloc(sizeof(struct part_record)); xassert (part_ptr->magic = PART_MAGIC); /* set value */ - strcpy(part_ptr->name, "DEFAULT"); + part_ptr->name = xstrdup("DEFAULT"); part_ptr->hidden = default_part.hidden; part_ptr->max_time = default_part.max_time; part_ptr->max_nodes = default_part.max_nodes; @@ -493,7 +493,8 @@ int load_all_part_state(void) part_ptr->max_nodes = max_nodes; part_ptr->min_nodes = min_nodes; if (def_part_flag) { - strncpy(default_part_name, part_name, MAX_SLURM_NAME); + xfree(default_part_name); + default_part_name = xstrdup(part_name); default_part_loc = part_ptr; } part_ptr->root_only = root_only; @@ -547,7 +548,7 @@ int init_part_conf(void) { last_part_update = time(NULL); - strcpy(default_part.name, "DEFAULT"); + default_part.name = xstrdup("DEFAULT"); default_part.hidden = 0; default_part.max_time = INFINITE; default_part.max_nodes = INFINITE; @@ -571,7 +572,7 @@ int init_part_conf(void) if (part_list == NULL) fatal ("memory allocation failure"); - strcpy(default_part_name, ""); + xfree(default_part_name); default_part_loc = (struct part_record *) NULL; return 0; @@ -603,6 +604,7 @@ static void _list_delete_part(void *part_entry) break; } } + xfree(part_ptr->name); xfree(part_ptr->allow_groups); xfree(part_ptr->allow_uids); xfree(part_ptr->nodes); @@ -623,8 +625,7 @@ int list_find_part(void *part_entry, void *key) if (strcmp(key, "universal_key") == 0) return 1; - if (strncmp(((struct part_record *) part_entry)->name, - (char *) key, MAX_SLURM_NAME) == 0) + if (strcmp(((struct part_record *)part_entry)->name, (char *) key) == 0) return 1; return 0; @@ -784,10 +785,8 @@ int update_part(update_part_msg_t * part_desc) int error_code; struct part_record *part_ptr; - if ((part_desc->name == NULL) || - (strlen(part_desc->name) >= MAX_SLURM_NAME)) { - error("update_part: invalid partition name %s", - part_desc->name); + if (part_desc->name == NULL) { + error("update_part: invalid partition name, NULL"); return ESLURM_INVALID_PARTITION_NAME; } @@ -799,7 +798,7 @@ int update_part(update_part_msg_t * part_desc) info("update_part: partition %s does not exist, " "being created", part_desc->name); part_ptr = create_part_record(); - strcpy(part_ptr->name, part_desc->name); + part_ptr->name = xstrdup(part_desc->name); } last_part_update = time(NULL); @@ -863,11 +862,16 @@ int update_part(update_part_msg_t * part_desc) part_ptr->priority = part_desc->priority; } - if ((part_desc->default_part == 1) && - (strcmp(default_part_name, part_desc->name) != 0)) { - info("update_part: changing default partition from %s to %s", - default_part_name, part_desc->name); - strncpy(default_part_name, part_desc->name, MAX_SLURM_NAME); + if (part_desc->default_part == 1) { + if (default_part_name == NULL) { + info("update_part: setting default partition to %s", + part_desc->name); + } else if (strcmp(default_part_name, part_desc->name) != 0) { + info("update_part: changing default partition from %s to %s", + default_part_name, part_desc->name); + } + xfree(default_part_name); + default_part_name = xstrdup(part_desc->name); default_part_loc = part_ptr; } @@ -1120,6 +1124,7 @@ void part_fini (void) list_destroy(part_list); part_list = NULL; } + xfree(default_part_name); default_part_loc = (struct part_record *) NULL; } diff --git a/src/slurmctld/read_config.c b/src/slurmctld/read_config.c index b84d1bb7c06..346b62925eb 100644 --- a/src/slurmctld/read_config.c +++ b/src/slurmctld/read_config.c @@ -97,7 +97,7 @@ static int _sync_nodes_to_active_job(struct job_record *job_ptr); static void _validate_node_proc_count(void); #endif -static char highest_node_name[MAX_SLURM_NAME] = ""; +static char *highest_node_name = NULL; int node_record_count = 0; /* FIXME - declarations for temporarily moved functions */ @@ -281,7 +281,7 @@ static int _init_all_slurm_conf(void) if ((error_code = init_job_conf())) return error_code; - strcpy(highest_node_name, ""); + xfree(highest_node_name); return 0; } @@ -420,14 +420,16 @@ static int _build_single_nodeline_info(slurm_conf_node_t *node_ptr, hostname = hostlist_shift(hostname_list); address = hostlist_shift(address_list); #endif - if (strcmp(alias, highest_node_name) <= 0) { + if (highest_node_name && + (strcmp(alias, highest_node_name) <= 0)) { /* find_node_record locks this to get the alias so we need to unlock */ slurm_conf_unlock(); node_rec = find_node_record(alias); slurm_conf_lock(); } else { - strncpy(highest_node_name, alias, MAX_SLURM_NAME); + xfree(highest_node_name); + highest_node_name = xstrdup(alias); node_rec = NULL; } @@ -437,7 +439,7 @@ static int _build_single_nodeline_info(slurm_conf_node_t *node_ptr, (state_val != NODE_STATE_UNKNOWN)) node_rec->node_state = state_val; node_rec->last_response = (time_t) 0; - strncpy(node_rec->comm_name, address, MAX_SLURM_NAME); + node_rec->comm_name = xstrdup(address); node_rec->port = node_ptr->port; node_rec->reason = xstrdup(node_ptr->reason); @@ -565,6 +567,7 @@ static int _build_all_nodeline_info(slurm_ctl_conf_t *conf) _build_single_nodeline_info(node, config_ptr, conf); } + xfree(highest_node_name); return SLURM_SUCCESS; } @@ -580,28 +583,23 @@ static int _build_single_partitionline_info(slurm_conf_partition_t *part) { struct part_record *part_ptr; - if (strlen(part->name) >= MAX_SLURM_NAME) { - error("_parse_part_spec: partition name %s too long", - part->name); - return EINVAL; - } - part_ptr = list_find_first(part_list, &list_find_part, part->name); if (part_ptr == NULL) { part_ptr = create_part_record(); - strcpy(part_ptr->name, part->name); + part_ptr->name = xstrdup(part->name); } else { verbose("_parse_part_spec: duplicate entry for partition %s", part->name); } if (part->default_flag) { - if ((strlen(default_part_name) > 0) + if (default_part_name && strcmp(default_part_name, part->name)) info("_parse_part_spec: changing default partition " "from %s to %s", default_part_name, part->name); - strcpy(default_part_name, part->name); + xfree(default_part_name); + default_part_name = xstrdup(part->name); default_part_loc = part_ptr; } part_ptr->hidden = part->hidden_flag ? 1 : 0; @@ -870,6 +868,8 @@ static void _purge_old_node_state(struct node_record *old_node_table_ptr, int i; for (i = 0; i < old_node_record_count; i++) { + xfree(old_node_table_ptr[i].name); + xfree(old_node_table_ptr[i].comm_name); xfree(old_node_table_ptr[i].part_pptr); xfree(old_node_table_ptr[i].features); xfree(old_node_table_ptr[i].reason); diff --git a/src/slurmctld/slurmctld.h b/src/slurmctld/slurmctld.h index 8326995d207..920e51b7f76 100644 --- a/src/slurmctld/slurmctld.h +++ b/src/slurmctld/slurmctld.h @@ -164,7 +164,6 @@ extern int bg_recover; /* state recovery mode */ /*****************************************************************************\ * NODE parameters and data structures \*****************************************************************************/ -#define MAX_JOBNAME_LEN 256 #define CONFIG_MAGIC 0xc065eded #define NODE_MAGIC 0x0de575ed @@ -187,7 +186,7 @@ extern List config_list; /* list of config_record entries */ struct node_record { uint32_t magic; /* magic cookie for data integrity */ - char name[MAX_SLURM_NAME]; /* name of the node. NULL==defunct */ + char *name; /* name of the node. NULL==defunct */ uint16_t node_state; /* enum node_states, ORed with * NODE_STATE_NO_RESPOND if not * responding */ @@ -203,7 +202,7 @@ struct node_record { uint16_t part_cnt; /* number of associated partitions */ struct part_record **part_pptr; /* array of pointers to partitions * associated with this node*/ - char comm_name[MAX_SLURM_NAME]; /* communications path name to node */ + char *comm_name; /* communications path name to node */ uint16_t port; /* TCP port number of the slurmd */ slurm_addr slurm_addr; /* network address */ uint16_t comp_job_cnt; /* count of jobs completing on node */ @@ -235,7 +234,7 @@ extern bitstr_t *up_node_bitmap; /* bitmap of up nodes, not DOWN */ struct part_record { uint32_t magic; /* magic cookie to test data integrity */ - char name[MAX_SLURM_NAME];/* name of the partition */ + char *name; /* name of the partition */ uint16_t hidden; /* 1 if hidden by default */ uint32_t max_time; /* minutes or INFINITE */ uint32_t max_nodes; /* per job or INFINITE */ @@ -259,7 +258,7 @@ struct part_record { extern List part_list; /* list of part_record entries */ extern time_t last_part_update; /* time of last part_list update */ extern struct part_record default_part; /* default configuration values */ -extern char default_part_name[MAX_SLURM_NAME]; /* name of default partition */ +extern char *default_part_name; /* name of default partition */ extern struct part_record *default_part_loc; /* default partition ptr */ /*****************************************************************************\ @@ -335,8 +334,8 @@ struct job_details { struct job_record { uint32_t job_id; /* job ID */ uint32_t magic; /* magic cookie for data integrity */ - char name[MAX_JOBNAME_LEN]; /* name of the job */ - char partition[MAX_SLURM_NAME]; /* name of the partition */ + char *name; /* name of the job */ + char *partition; /* name of the partition */ struct part_record *part_ptr; /* pointer to the partition record */ uint16_t batch_flag; /* 1 or 2 if batch job (with script), * 2 indicates retry mode (one retry) */ -- GitLab