int pmixp_server_health_chk(char *hostlist, const char *addr) { send_header_t hdr; char nhdr[sizeof(send_header_t)]; size_t hsize; Buf buf = pmixp_server_new_buf(); char *data = get_buf_data(buf); int rc; hdr.magic = PMIX_SERVER_MSG_MAGIC; hdr.type = PMIXP_MSG_HEALTH_CHK; hdr.msgsize = 1; hdr.seq = 0; /* Store global nodeid that is * independent from exact collective */ hdr.nodeid = pmixp_info_nodeid_job(); hsize = _send_pack_hdr(&hdr, nhdr); memcpy(data, nhdr, hsize); grow_buf(buf, sizeof(char)); pack8('\n', buf); rc = pmixp_stepd_send(hostlist, addr, data, get_buf_offset(buf), 4, 14, 1); if (SLURM_SUCCESS != rc) { PMIXP_ERROR("Was unable to wait for the parent %s to become alive on addr %s", hostlist, addr); } return rc; }
int pmixp_server_send(char *hostlist, pmixp_srv_cmd_t type, uint32_t seq, const char *addr, void *data, size_t size, int p2p) { send_header_t hdr; char nhdr[sizeof(send_header_t)]; size_t hsize; int rc; hdr.magic = PMIX_SERVER_MSG_MAGIC; hdr.type = type; hdr.msgsize = size - SEND_HDR_SIZE; hdr.seq = seq; /* Store global nodeid that is * independent from exact collective */ hdr.nodeid = pmixp_info_nodeid_job(); hsize = _send_pack_hdr(&hdr, nhdr); memcpy(data, nhdr, hsize); if( !p2p ){ rc = pmixp_stepd_send(hostlist, addr, data, size, 500, 7, 0); } else { rc = pmixp_p2p_send(hostlist, addr, data, size, 500, 7, 0); } if (SLURM_SUCCESS != rc) { PMIXP_ERROR("Cannot send message to %s, size = %u, hostlist:\n%s", addr, (uint32_t) size, hostlist); } return rc; }
static int _slurm_send(pmixp_ep_t *ep, pmixp_base_hdr_t bhdr, Buf buf) { const char *addr = NULL, *data = NULL, *hostlist = NULL; char nhdr[PMIXP_BASE_HDR_MAX]; size_t hsize = 0, dsize = 0; int rc; /* setup the header */ addr = pmixp_info_srv_usock_path(); bhdr.ext_flag = 0; if (pmixp_info_srv_direct_conn() && PMIXP_EP_NOIDEID == ep->type) { bhdr.ext_flag = 1; } hsize = _slurm_pack_hdr(&bhdr, nhdr); data = _buf_finalize(buf, nhdr, hsize, &dsize); switch( ep->type ){ case PMIXP_EP_HLIST: hostlist = ep->ep.hostlist; rc = pmixp_stepd_send(ep->ep.hostlist, addr, data, dsize, 500, 7, 0); break; case PMIXP_EP_NOIDEID: { char *nodename = pmixp_info_job_host(ep->ep.nodeid); rc = pmixp_p2p_send(nodename, addr, data, dsize, 500, 7, 0); xfree(nodename); break; } default: PMIXP_ERROR("Bad value of the EP type: %d", (int)ep->type); abort(); } if (SLURM_SUCCESS != rc) { PMIXP_ERROR("Cannot send message to %s, size = %u, " "hostlist:\n%s", addr, (uint32_t) dsize, hostlist); } return rc; }