diff --git a/src/slurmctld/node_scheduler.c b/src/slurmctld/node_scheduler.c index 2d092fc263582f011385c00afa37c4e69cf74242..238939322fd3b41a4fd9b33cd7c0a5d0727da489 100644 --- a/src/slurmctld/node_scheduler.c +++ b/src/slurmctld/node_scheduler.c @@ -2724,6 +2724,31 @@ static void _launch_prolog(struct job_record *job_ptr) agent_arg_ptr->msg_type = REQUEST_LAUNCH_PROLOG; agent_arg_ptr->msg_args = (void *) prolog_msg_ptr; + /* At least on a Cray we have to treat this as a real step, so + * this is where to do it. + */ + if (slurmctld_conf.prolog_flags & PROLOG_FLAG_CONTAIN) { + struct step_record step_rec; + slurm_step_layout_t layout; + + memset(&step_rec, 0, sizeof(step_rec)); + memset(&layout, 0, sizeof(layout)); + +#ifdef HAVE_FRONT_END + layout.node_list = job_ptr->front_end_ptr->name; +#else + layout.node_list = job_ptr->nodes; +#endif + layout.node_cnt = agent_arg_ptr->node_count; + + step_rec.step_layout = &layout; + step_rec.step_id = SLURM_EXTERN_CONT; + step_rec.job_ptr = job_ptr; + step_rec.name = "external"; + + select_g_step_start(&step_rec); + } + /* Launch the RPC via agent */ agent_queue_request(agent_arg_ptr); } diff --git a/src/slurmctld/step_mgr.c b/src/slurmctld/step_mgr.c index 11dd5ce461346769c12eae822df73670043a71e3..fc634b454c1746a5e95b79e2c74cac3191203ee3 100644 --- a/src/slurmctld/step_mgr.c +++ b/src/slurmctld/step_mgr.c @@ -742,7 +742,7 @@ int job_step_complete(uint32_t job_id, uint32_t step_id, uid_t uid, return ESLURM_INVALID_JOB_ID; if (step_ptr->step_id == SLURM_EXTERN_CONT) - return SLURM_SUCCESS; + return select_g_step_finish(step_ptr, true); /* If the job is already cleaning we have already been here * before, so just return. */