Skip to content
Snippets Groups Projects
Commit 1c48e2dd authored by Moe Jette's avatar Moe Jette
Browse files

Patch #20: Implements the job_signal() function pointer for select/cray, building on top

            of patches #17 and #18.
parent c41c707b
No related branches found
No related tags found
No related merge requests found
......@@ -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__ */
......@@ -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
......
......@@ -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;
......
......@@ -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);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment