extern int temp_kvs_send(void) { int rc = SLURM_ERROR, retry = 0; unsigned int delay = 1; /* cmd included in temp_kvs_buf */ kvs_seq ++; /* expecting new kvs after now */ while (1) { if (retry == 1) { verbose("failed to send temp kvs, rc=%d, retrying", rc); } if (! in_stepd()) { /* srun */ rc = tree_msg_to_stepds(job_info.step_nodelist, temp_kvs_cnt, temp_kvs_buf); } else if (tree_info.parent_node != NULL) { /* non-first-level stepds */ rc = tree_msg_to_stepds(tree_info.parent_node, temp_kvs_cnt, temp_kvs_buf); } else { /* first level stepds */ rc = tree_msg_to_srun(temp_kvs_cnt, temp_kvs_buf); } if (rc == SLURM_SUCCESS) break; retry ++; if (retry >= MAX_RETRIES) break; /* wait, in case parent stepd / srun not ready */ sleep(delay); delay *= 2; } temp_kvs_init(); /* clear old temp kvs */ return rc; }
extern int spawn_resp_send_to_stepd(spawn_resp_t *resp, char *node) { Buf buf; int rc; uint16_t cmd; buf = init_buf(1024); cmd = TREE_CMD_SPAWN_RESP; pack16(cmd, buf); spawn_resp_pack(resp, buf); rc = tree_msg_to_stepds(node, get_buf_offset(buf), get_buf_data(buf)); free_buf(buf); return rc; }
extern int spawn_resp_send_to_stepd(spawn_resp_t *resp, char *node) { Buf buf; int rc; uint16_t cmd; hostlist_t hl; buf = init_buf(1024); cmd = TREE_CMD_SPAWN_RESP; pack16(cmd, buf); spawn_resp_pack(resp, buf); hl = hostlist_create(node); rc = tree_msg_to_stepds(hl, get_buf_offset(buf), get_buf_data(buf)); hostlist_destroy(hl); free_buf(buf); return rc; }