diff --git a/NEWS b/NEWS index 5315e8f68255aaa625b052e1b2f04ad6b64ebad5..dcc584333f98503cc82b84ef989226f346bd8557 100644 --- a/NEWS +++ b/NEWS @@ -49,6 +49,8 @@ documents those changes that are of interest to users and administrators. -- Add null check for step_ptr->step_node_bitmap in _pick_step_nodes. -- Fix multi-cluster srun issue after 'scontrol reconfigure' was called. -- Fix accessing response_cluster_rec outside of write locks. + -- Fix Lua user messages not showing up on rejected submissions. + -- Fix printing multi-line error messages on rejected submissions. * Changes in Slurm 18.08.5-2 ============================ diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c index 8358ba304357caa28070a2d33a4eacf0d0247512..71ba3453636b7dc30f47fd5db3f567da3fb008e4 100644 --- a/src/common/slurm_protocol_pack.c +++ b/src/common/slurm_protocol_pack.c @@ -10028,6 +10028,27 @@ _pack_return_code2_msg(return_code2_msg_t * msg, Buf buffer, packstr(msg->err_msg, buffer); } +/* + * See print_multi_line_string() + * + * Will refactor in 19.05. + */ +static void _print_multi_line_error_string(char *user_msg) +{ + char *line, *buf, *ptrptr = NULL; + + if (!user_msg) + return; + + buf = xstrdup(user_msg); + line = strtok_r(buf, "\n", &ptrptr); + while (line) { + error("%s", line); + line = strtok_r(NULL, "\n", &ptrptr); + } + xfree(buf); +} + /* Log error message, otherwise replicate _unpack_return_code_msg() */ static int _unpack_return_code2_msg(return_code_msg_t ** msg, Buf buffer, @@ -10044,7 +10065,7 @@ _unpack_return_code2_msg(return_code_msg_t ** msg, Buf buffer, safe_unpack32(&return_code_msg->return_code, buffer); safe_unpackstr_xmalloc(&err_msg, &uint32_tmp, buffer); if (err_msg) { - error("%s", err_msg); + _print_multi_line_error_string(err_msg); xfree(err_msg); } return SLURM_SUCCESS; diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c index 871a5f2b7dce7f37d181ec39fb8355a01caf258f..843589428564b8957266584d17198c8b9e962268 100644 --- a/src/slurmctld/proc_req.c +++ b/src/slurmctld/proc_req.c @@ -1514,7 +1514,31 @@ static void _slurm_rpc_allocate_pack(slurm_msg_t * msg) _kill_job_on_msg_fail(pack_job_id); list_destroy(resp); } else { + char *aggregate_user_msg = NULL; + send_msg: info("%s: %s ", __func__, slurm_strerror(error_code)); + + /* + * If job is rejected, add the job submit message to the error + * message to avoid it getting lost. Was saved off earlier. + */ + for (inx = 0; inx < pack_cnt; inx++) { + if (!job_submit_user_msg[inx]) + continue; + + xstrfmtcat(aggregate_user_msg, "%s%d: %s", + (aggregate_user_msg ? "\n" : ""), + inx, job_submit_user_msg[inx]); + } + if (aggregate_user_msg) { + char *tmp_err_msg = err_msg; + err_msg = aggregate_user_msg; + if (tmp_err_msg) { + xstrfmtcat(err_msg, "\n%s", tmp_err_msg); + xfree(tmp_err_msg); + } + } + if (err_msg) slurm_send_rc_err_msg(msg, error_code, err_msg); else @@ -1711,6 +1735,21 @@ send_msg: _throttle_fini(&active_rpc_cnt); } info("%s: %s ", __func__, slurm_strerror(error_code)); + + /* + * If job is rejected, add the job submit message to the error + * message to avoid it getting lost. Was saved off earlier. + */ + if (job_submit_user_msg) { + char *tmp_err_msg = err_msg; + err_msg = job_submit_user_msg; + job_submit_user_msg = NULL; + if (tmp_err_msg) { + xstrfmtcat(err_msg, "\n%s", tmp_err_msg); + xfree(tmp_err_msg); + } + } + if (err_msg) slurm_send_rc_err_msg(msg, error_code, err_msg); else @@ -4093,6 +4132,21 @@ send_msg: if (reject_job) { info("%s: %s", __func__, slurm_strerror(error_code)); + + /* + * If job is rejected, add the job submit message to the error + * message to avoid it getting lost. Was saved off earlier. + */ + if (job_submit_user_msg) { + char *tmp_err_msg = err_msg; + err_msg = job_submit_user_msg; + job_submit_user_msg = NULL; + if (tmp_err_msg) { + xstrfmtcat(err_msg, "\n%s", tmp_err_msg); + xfree(tmp_err_msg); + } + } + if (err_msg) slurm_send_rc_err_msg(msg, error_code, err_msg); else @@ -4371,6 +4425,21 @@ send_msg: END_TIMER2("_slurm_rpc_submit_batch_pack_job"); if (reject_job) { info("%s: %s", __func__, slurm_strerror(error_code)); + + /* + * If job is rejected, add the job submit message to the error + * message to avoid it getting lost. Was saved off earlier. + */ + if (job_submit_user_msg) { + char *tmp_err_msg = err_msg; + err_msg = job_submit_user_msg; + job_submit_user_msg = NULL; + if (tmp_err_msg) { + xstrfmtcat(err_msg, "\n%s", tmp_err_msg); + xfree(tmp_err_msg); + } + } + if (err_msg) slurm_send_rc_err_msg(msg, error_code, err_msg); else