diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c index 35cd7486f8d6d6c26652d56af52e23bd269c8420..0acf463fe81291bf6f743b006ae619de82bc8722 100644 --- a/src/slurmctld/job_mgr.c +++ b/src/slurmctld/job_mgr.c @@ -1248,6 +1248,7 @@ static int _dump_job_state(void *x, void *arg) dump_job_ptr->pelog_env_size, buffer); pack32(dump_job_ptr->pack_leader, buffer); + packstr(dump_job_ptr->clusters, buffer); _dump_job_fed_details(dump_job_ptr->fed_details, buffer); return 0; @@ -1289,6 +1290,7 @@ static int _load_job_state(Buf buffer, uint16_t protocol_version) char *gres_alloc = NULL, *gres_req = NULL, *gres_used = NULL; char *burst_buffer = NULL, *burst_buffer_state = NULL; char *admin_comment = NULL, *task_id_str = NULL, *mcs_label = NULL; + char *clusters = NULL; uint32_t task_id_size = NO_VAL; char **spank_job_env = (char **) NULL; List gres_list = NULL, part_ptr_list = NULL; @@ -1509,7 +1511,7 @@ static int _load_job_state(Buf buffer, uint16_t protocol_version) safe_unpackstr_array(&pelog_env, &pelog_env_size, buffer); safe_unpack32(&pack_leader, buffer); - + safe_unpackstr_xmalloc(&clusters, &name_len, buffer); if ((error_code = _load_job_fed_details(&job_fed_details, buffer, protocol_version))) @@ -2213,6 +2215,7 @@ static int _load_job_state(Buf buffer, uint16_t protocol_version) job_ptr->pelog_env = pelog_env; job_ptr->pelog_env_size = pelog_env_size; job_ptr->pack_leader = pack_leader; + job_ptr->clusters = clusters; job_ptr->fed_details = job_fed_details; return SLURM_SUCCESS; @@ -2223,6 +2226,7 @@ unpack_error: xfree(admin_comment); xfree(batch_host); xfree(burst_buffer); + xfree(clusters); xfree(comment); xfree(gres); xfree(gres_alloc); @@ -7400,6 +7404,8 @@ _copy_job_desc_to_job_record(job_desc_msg_t * job_desc, else detail_ptr->ckpt_dir = xstrdup(detail_ptr->work_dir); + job_ptr->clusters = xstrdup(job_desc->clusters); + /* The priority needs to be set after this since we don't have * an association rec yet */ @@ -8253,6 +8259,7 @@ static void _list_delete_job(void *job_entry) xfree(job_ptr->burst_buffer); checkpoint_free_jobinfo(job_ptr->check_job); xfree(job_ptr->comment); + xfree(job_ptr->clusters); _free_job_fed_details(&job_ptr->fed_details); free_job_resources(&job_ptr->job_resrcs); xfree(job_ptr->gres); @@ -15380,6 +15387,7 @@ extern job_desc_msg_t *copy_job_record_to_job_desc(struct job_record *job_ptr) job_desc->begin_time = details->begin_time; job_desc->ckpt_interval = job_ptr->ckpt_interval; job_desc->ckpt_dir = xstrdup(details->ckpt_dir); + job_desc->clusters = xstrdup(job_ptr->clusters); job_desc->comment = xstrdup(job_ptr->comment); job_desc->contiguous = details->contiguous; job_desc->core_spec = details->core_spec; diff --git a/src/slurmctld/slurmctld.h b/src/slurmctld/slurmctld.h index 706a87a3aed9ef983d0d151e7851eab2d714a031..43a1a3f85cccac0e1df3d6983efc200a5c91f1ea 100644 --- a/src/slurmctld/slurmctld.h +++ b/src/slurmctld/slurmctld.h @@ -604,6 +604,8 @@ struct job_record { uint16_t ckpt_interval; /* checkpoint interval in minutes */ time_t ckpt_time; /* last time job was periodically * checkpointed */ + char *clusters; /* clusters job is submitted to with -M + option */ char *comment; /* arbitrary comment */ uint32_t cpu_cnt; /* current count of CPUs held * by the job, decremented while job is