diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 5a03d1e2ce5dac6ad1777ebc666ba506aa8de669..f121af6e9c9aca63fc1a7da7aa8f197e0a48ae3c 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -64,7 +64,7 @@ COMMAND CHANGES (see man pages for details) BLUEGENE SPECIFIC CHANGES ========================= - +BGQ support added. OTHER CHANGES ============= @@ -98,6 +98,9 @@ job_info_t batch_host name of the host running the batch script preempt_time time that a job become preempted +job_step_create_response_msg_t + select_jobinfo data needed from the select plugin for a step + partition_info_t grace_time preempted job's grace time in seconds diff --git a/src/common/env.c b/src/common/env.c index 2393ec3873bd26267d605e488e8c50ebef505536..7595f60467a4d09738cbfa14fa6b6c8de60853a9 100644 --- a/src/common/env.c +++ b/src/common/env.c @@ -113,6 +113,14 @@ static int _setup_particulars(uint32_t cluster_flags, setenvf(dest, "MPIRUN_NOFREE", "%d", 1); setenvf(dest, "MPIRUN_NOALLOCATE", "%d", 1); xfree(bg_part_id); + select_g_select_jobinfo_get(select_jobinfo, + SELECT_JOBDATA_IONODES, + &bg_part_id); + if (bg_part_id) { + setenvf(dest, "SLURM_JOB_SUB_MP", "%s", + bg_part_id); + xfree(bg_part_id); + } } else rc = SLURM_FAILURE; @@ -1128,6 +1136,7 @@ env_array_for_batch_job(char ***dest, const batch_job_launch_msg_t *batch, * SLURM_STEP_LAUNCHER_PORT * SLURM_STEP_LAUNCHER_IPADDR * SLURM_STEP_RESV_PORTS + * SLURM_STEP_SUB_MP * * Sets OBSOLETE variables: * SLURM_STEPID @@ -1163,6 +1172,13 @@ env_array_for_step(char ***dest, env_array_overwrite_fmt(dest, "SLURM_STEP_RESV_PORTS", "%s", step->resv_ports); } + select_g_select_jobinfo_get(step->select_jobinfo, + SELECT_JOBDATA_IONODES, + &tmp); + if (tmp) { + setenvf(dest, "SLURM_STEP_SUB_MP", "%s", tmp); + xfree(tmp); + } /* OBSOLETE, but needed by MPI, do not remove */ env_array_overwrite_fmt(dest, "SLURM_STEPID", "%u", step->job_step_id); diff --git a/src/common/slurm_protocol_defs.c b/src/common/slurm_protocol_defs.c index 8beacae74a6f76031bb05c50483e0da9d4faf424..3d94ef08fd41337fd17280279f86ae637f2b35dc 100644 --- a/src/common/slurm_protocol_defs.c +++ b/src/common/slurm_protocol_defs.c @@ -1728,6 +1728,7 @@ void slurm_free_job_step_create_response_msg( xfree(msg->resv_ports); slurm_step_layout_destroy(msg->step_layout); slurm_cred_destroy(msg->cred); + select_g_select_jobinfo_free(msg->select_jobinfo); if (msg->switch_job) switch_free_jobinfo(msg->switch_job); diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h index 28a086d36ca9f533363e3614c6cf4543a91cb4aa..2e44922eb6eb2e6a84562ef7ef8160a70ea1fdd8 100644 --- a/src/common/slurm_protocol_defs.h +++ b/src/common/slurm_protocol_defs.h @@ -616,6 +616,7 @@ typedef struct job_step_create_response_msg { slurm_step_layout_t *step_layout; /* information about how the * step is laid out */ slurm_cred_t *cred; /* slurm job credential */ + dynamic_plugin_data_t *select_jobinfo; /* select opaque data type */ switch_jobinfo_t *switch_job; /* switch context, opaque * data structure */ } job_step_create_response_msg_t; diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c index cf5fafb772a37c213b5f33336df3f71101231497..07b47c6914b041e1f78bb859fed26dffe2cedc88 100644 --- a/src/common/slurm_protocol_pack.c +++ b/src/common/slurm_protocol_pack.c @@ -3441,12 +3441,23 @@ _pack_job_step_create_response_msg(job_step_create_response_msg_t * msg, { xassert(msg != NULL); - packstr(msg->resv_ports, buffer); - pack32(msg->job_step_id, buffer); - pack_slurm_step_layout(msg->step_layout, buffer, protocol_version); - slurm_cred_pack(msg->cred, buffer); - switch_pack_jobinfo(msg->switch_job, buffer); - + if(protocol_version >= SLURM_2_3_PROTOCOL_VERSION) { + packstr(msg->resv_ports, buffer); + pack32(msg->job_step_id, buffer); + pack_slurm_step_layout( + msg->step_layout, buffer, protocol_version); + slurm_cred_pack(msg->cred, buffer); + select_g_select_jobinfo_pack( + msg->select_jobinfo, buffer, protocol_version); + switch_pack_jobinfo(msg->switch_job, buffer); + } else { + packstr(msg->resv_ports, buffer); + pack32(msg->job_step_id, buffer); + pack_slurm_step_layout( + msg->step_layout, buffer, protocol_version); + slurm_cred_pack(msg->cred, buffer); + switch_pack_jobinfo(msg->switch_job, buffer); + } } static int @@ -3462,20 +3473,45 @@ _unpack_job_step_create_response_msg(job_step_create_response_msg_t ** msg, tmp_ptr = xmalloc(sizeof(job_step_create_response_msg_t)); *msg = tmp_ptr; - safe_unpackstr_xmalloc(&tmp_ptr->resv_ports, &uint32_tmp, buffer); - safe_unpack32(&tmp_ptr->job_step_id, buffer); - if (unpack_slurm_step_layout(&tmp_ptr->step_layout, buffer, - protocol_version)) - goto unpack_error; + if(protocol_version >= SLURM_2_3_PROTOCOL_VERSION) { + safe_unpackstr_xmalloc( + &tmp_ptr->resv_ports, &uint32_tmp, buffer); + safe_unpack32(&tmp_ptr->job_step_id, buffer); + if (unpack_slurm_step_layout(&tmp_ptr->step_layout, buffer, + protocol_version)) + goto unpack_error; - if (!(tmp_ptr->cred = slurm_cred_unpack(buffer, protocol_version))) - goto unpack_error; + if (!(tmp_ptr->cred = slurm_cred_unpack( + buffer, protocol_version))) + goto unpack_error; - switch_alloc_jobinfo(&tmp_ptr->switch_job); - if (switch_unpack_jobinfo(tmp_ptr->switch_job, buffer)) { - error("switch_unpack_jobinfo: %m"); - switch_free_jobinfo(tmp_ptr->switch_job); - goto unpack_error; + if (select_g_select_jobinfo_unpack( + &tmp_ptr->select_jobinfo, buffer, protocol_version)) + goto unpack_error; + switch_alloc_jobinfo(&tmp_ptr->switch_job); + if (switch_unpack_jobinfo(tmp_ptr->switch_job, buffer)) { + error("switch_unpack_jobinfo: %m"); + switch_free_jobinfo(tmp_ptr->switch_job); + goto unpack_error; + } + } else { + safe_unpackstr_xmalloc( + &tmp_ptr->resv_ports, &uint32_tmp, buffer); + safe_unpack32(&tmp_ptr->job_step_id, buffer); + if (unpack_slurm_step_layout(&tmp_ptr->step_layout, buffer, + protocol_version)) + goto unpack_error; + + if (!(tmp_ptr->cred = slurm_cred_unpack( + buffer, protocol_version))) + goto unpack_error; + + switch_alloc_jobinfo(&tmp_ptr->switch_job); + if (switch_unpack_jobinfo(tmp_ptr->switch_job, buffer)) { + error("switch_unpack_jobinfo: %m"); + switch_free_jobinfo(tmp_ptr->switch_job); + goto unpack_error; + } } return SLURM_SUCCESS; diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c index 44d0c65138cc076000f52afcbc8a6f0c9cbbce14..34efaf59f86cdc5c84626bd1e622ff0bcf4455e8 100644 --- a/src/slurmctld/proc_req.c +++ b/src/slurmctld/proc_req.c @@ -1678,6 +1678,8 @@ static void _slurm_rpc_job_step_create(slurm_msg_t * msg) } #endif job_step_resp.cred = slurm_cred; + job_step_resp.select_jobinfo = select_g_select_jobinfo_copy( + step_rec->select_jobinfo); job_step_resp.switch_job = switch_copy_jobinfo( step_rec->switch_job);