From 1c48e2ddc95c76bdffb50c36b9c945b4bce8cf26 Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Sat, 26 Mar 2011 02:55:47 +0000 Subject: [PATCH] Patch #20: Implements the job_signal() function pointer for select/cray, building on top of patches #17 and #18. --- src/plugins/select/cray/basil_alps.h | 2 ++ src/plugins/select/cray/basil_interface.c | 23 +++++++++++++++++++++++ src/plugins/select/cray/basil_interface.h | 6 ++++++ src/plugins/select/cray/select_cray.c | 2 ++ 4 files changed, 33 insertions(+) diff --git a/src/plugins/select/cray/basil_alps.h b/src/plugins/select/cray/basil_alps.h index af6f100464f..a993d3d976b 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 bb94b25c681..e6be0b5cd2c 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 ec59c981317..e28b6c4d8f5 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 d3e4301f6e6..29af7fb6183 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); } -- GitLab