static int _signal_batch_script_step(const resource_allocation_response_msg_t *allocation, uint32_t signal) { slurm_msg_t msg; kill_tasks_msg_t rpc; int rc = SLURM_SUCCESS; char *name = nodelist_nth_host(allocation->node_list, 0); if (!name) { error("_signal_batch_script_step: " "can't get the first name out of %s", allocation->node_list); return -1; } rpc.job_id = allocation->job_id; rpc.job_step_id = SLURM_BATCH_SCRIPT; rpc.signal = signal; slurm_msg_t_init(&msg); msg.msg_type = REQUEST_SIGNAL_TASKS; msg.data = &rpc; if (slurm_conf_get_addr(name, &msg.address) == SLURM_ERROR) { error("_signal_batch_script_step: " "can't find address for host %s, check slurm.conf", name); free(name); return -1; } free(name); if (slurm_send_recv_rc_msg_only_one(&msg, &rc, 0) < 0) { error("_signal_batch_script_step: %m"); rc = -1; } return rc; }
char *slurm_step_layout_host_name (slurm_step_layout_t *s, int taskid) { int hostid = slurm_step_layout_host_id (s, taskid); if (hostid < 0) return NULL; return nodelist_nth_host(s->node_list, hostid); }
static int _terminate_batch_script_step(const resource_allocation_response_msg_t * allocation) { slurm_msg_t msg; kill_tasks_msg_t rpc; int rc = SLURM_SUCCESS; int i; char *name = nodelist_nth_host(allocation->node_list, 0); if (!name) { error("_terminate_batch_script_step: " "can't get the first name out of %s", allocation->node_list); return -1; } rpc.job_id = allocation->job_id; rpc.job_step_id = SLURM_BATCH_SCRIPT; rpc.signal = (uint32_t)-1; /* not used by slurmd */ slurm_msg_t_init(&msg); msg.msg_type = REQUEST_TERMINATE_TASKS; msg.data = &rpc; if (slurm_conf_get_addr(name, &msg.address) == SLURM_ERROR) { error("_terminate_batch_script_step: " "can't find address for host %s, check slurm.conf", name); free(name); return -1; } free(name); i = slurm_send_recv_rc_msg_only_one(&msg, &rc, 0); if (i != 0) rc = i; return rc; }