diff --git a/src/plugins/select/cray/basil_alps.h b/src/plugins/select/cray/basil_alps.h index af6f100464fe1b63ea4daefc0c4ec64269dbdcc3..a993d3d976b0bc4b9cfb78d53b0c2bb5b8216b62 100644 --- a/src/plugins/select/cray/basil_alps.h +++ b/src/plugins/select/cray/basil_alps.h @@ -546,6 +546,8 @@ extern const struct basil_rsvn *basil_rsvn_by_id(const struct basil_inventory *i extern uint64_t *basil_get_rsvn_aprun_apids(const struct basil_inventory *inv, uint32_t rsvn_id); extern int basil_release(uint32_t rsvn_id); +extern int basil_signal_apids(int32_t rsvn_id, int signal, + struct basil_inventory *inv); extern int basil_safe_release(int32_t rsvn_id, struct basil_inventory *inv); #endif /* __BASIL_ALPS_H__ */ diff --git a/src/plugins/select/cray/basil_interface.c b/src/plugins/select/cray/basil_interface.c index bb94b25c6818c38dc616bf981a25dfbcda566cf7..e6be0b5cd2c9fbcd04918ea7871438ef7b9b610a 100644 --- a/src/plugins/select/cray/basil_interface.c +++ b/src/plugins/select/cray/basil_interface.c @@ -725,6 +725,29 @@ extern int do_basil_confirm(struct job_record *job_ptr) return READY_JOB_FATAL; } +/** + * do_basil_signal - pass job signal on to any APIDs + * IN job_ptr - job to be signalled + * IN signal - signal(7) number + * Only signal job if an ALPS reservation exists (non-0 reservation ID). + */ +extern int do_basil_signal(struct job_record *job_ptr, int signal) +{ + uint32_t resv_id; + + if (_get_select_jobinfo(job_ptr->select_jobinfo->data, + SELECT_JOBDATA_RESV_ID, &resv_id) != SLURM_SUCCESS) { + error("can not read resId for JobId=%u", job_ptr->job_id); + } else if (resv_id != 0) { + int rc = basil_signal_apids(resv_id, signal, NULL); + + if (rc) + error("could not signal APIDS of resId %u: %s", resv_id, + basil_strerror(rc)); + } + return SLURM_SUCCESS; +} + /** * do_basil_release - release an (unconfirmed) BASIL reservation * IN job_ptr - pointer to job which has just been deallocated resources diff --git a/src/plugins/select/cray/basil_interface.h b/src/plugins/select/cray/basil_interface.h index ec59c9813173818dde4f8b8393df25ccc070b9f6..e28b6c4d8f5f7c081a3c098f5bce97fd7daa39ec 100644 --- a/src/plugins/select/cray/basil_interface.h +++ b/src/plugins/select/cray/basil_interface.h @@ -41,6 +41,7 @@ extern int basil_inventory(void); extern int basil_geometry(struct node_record *node_ptr_array, int node_cnt); extern int do_basil_reserve(struct job_record *job_ptr); extern int do_basil_confirm(struct job_record *job_ptr); +extern int do_basil_signal(struct job_record *job_ptr, int signal); extern int do_basil_release(struct job_record *job_ptr); #else /* !HAVE_CRAY */ static inline int basil_node_ranking(struct node_record *ig, int nore) @@ -67,6 +68,11 @@ static inline int do_basil_confirm(struct job_record *job_ptr) return SLURM_SUCCESS; } +static inline int do_basil_signal(struct job_record *job_ptr, int signal) +{ + return SLURM_SUCCESS; +} + static inline int do_basil_release(struct job_record *job_ptr) { return SLURM_SUCCESS; diff --git a/src/plugins/select/cray/select_cray.c b/src/plugins/select/cray/select_cray.c index d3e4301f6e64e864f664dadb9e2d155a6903bdea..29af7fb6183b9a0eefb0b8e4d11d1dd598f7d621 100644 --- a/src/plugins/select/cray/select_cray.c +++ b/src/plugins/select/cray/select_cray.c @@ -281,6 +281,8 @@ extern int select_p_job_expand(struct job_record *from_job_ptr, extern int select_p_job_signal(struct job_record *job_ptr, int signal) { + if (do_basil_signal(job_ptr, signal) != SLURM_SUCCESS) + return SLURM_ERROR; return other_job_signal(job_ptr, signal); }