From 3e321fdbe1a4ff6de9c57a9a91ff2ee99e06a714 Mon Sep 17 00:00:00 2001 From: Tim Wickberg <tim@schedmd.com> Date: Sun, 15 Oct 2017 12:51:02 -0600 Subject: [PATCH] Change function signature of _spawn_prolog_stepd Return an error if something doesn't work out. --- src/slurmd/slurmd/req.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/slurmd/slurmd/req.c b/src/slurmd/slurmd/req.c index cec690ce22b..8dad4dab89b 100644 --- a/src/slurmd/slurmd/req.c +++ b/src/slurmd/slurmd/req.c @@ -1928,12 +1928,13 @@ static void _make_prolog_mem_container(slurm_msg_t *msg) } } -static void _spawn_prolog_stepd(slurm_msg_t *msg) +static int _spawn_prolog_stepd(slurm_msg_t *msg) { prolog_launch_msg_t *req = (prolog_launch_msg_t *)msg->data; launch_tasks_request_msg_t *launch_req; slurm_addr_t self; slurm_addr_t *cli = &msg->orig_addr; + int rc = SLURM_SUCCESS; int i; launch_req = xmalloc(sizeof(launch_tasks_request_msg_t)); @@ -1982,17 +1983,25 @@ static void _spawn_prolog_stepd(slurm_msg_t *msg) */ if (slurm_get_stream_addr(msg->conn_fd, &self)) { error("%s: slurm_get_stream_addr(): %m", __func__); + rc = SLURM_ERROR; } else if (slurm_cred_revoked(conf->vctx, req->cred)) { info("Job %u already killed, do not launch extern step", req->job_id); + /* + * Don't set the rc to SLURM_ERROR at this point. + * The job's already been killed, and returning a prolog + * failure will just add more confusion. Better to just + * silently terminate. + */ } else { hostset_t step_hset = hostset_create(req->nodes); debug3("%s: call to _forkexec_slurmstepd", __func__); - (void) _forkexec_slurmstepd( - LAUNCH_TASKS, (void *)launch_req, cli, - &self, step_hset, msg->protocol_version); - debug3("%s: return from _forkexec_slurmstepd", __func__); + rc = _forkexec_slurmstepd(LAUNCH_TASKS, (void *)launch_req, + cli, &self, step_hset, + msg->protocol_version); + debug3("%s: return from _forkexec_slurmstepd %d", + __func__, rc); if (step_hset) hostset_destroy(step_hset); } @@ -2002,6 +2011,8 @@ static void _spawn_prolog_stepd(slurm_msg_t *msg) xfree(launch_req->global_task_ids); xfree(launch_req->tasks_to_launch); xfree(launch_req); + + return rc; } static void _rpc_prolog(slurm_msg_t *msg) -- GitLab