extern int spawn_resp_send_to_srun(spawn_resp_t *resp) { 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_srun(get_buf_offset(buf), get_buf_data(buf)); free_buf(buf); return rc; }
extern int temp_kvs_send(void) { int rc = SLURM_ERROR, retry = 0; unsigned int delay = 1; char *nodelist = NULL; if (!in_stepd()) /* srun */ nodelist = xstrdup(job_info.step_nodelist); else if (tree_info.parent_node) nodelist = xstrdup(tree_info.parent_node); /* 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 (nodelist) /* srun or non-first-level stepds */ rc = slurm_forward_data(&nodelist, tree_sock_addr, 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; if (++retry >= MAX_RETRIES) break; /* wait, in case parent stepd / srun not ready */ sleep(delay); delay *= 2; } temp_kvs_init(); /* clear old temp kvs */ xfree(nodelist); return rc; }
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; }