/* * send_slurmctld_register_req - request register from slurmctld * IN host: control host of cluster * IN port: control port of cluster * IN rpc_version: rpc version of cluster * RET: error code */ static int _send_slurmctld_register_req(slurmdb_cluster_rec_t *cluster_rec) { slurm_addr_t ctld_address; slurm_fd_t fd; int rc = SLURM_SUCCESS; slurm_set_addr_char(&ctld_address, cluster_rec->control_port, cluster_rec->control_host); fd = slurm_open_msg_conn(&ctld_address); if (fd < 0) { rc = SLURM_ERROR; } else { slurm_msg_t out_msg; slurm_msg_t_init(&out_msg); out_msg.msg_type = ACCOUNTING_REGISTER_CTLD; out_msg.flags = SLURM_GLOBAL_AUTH_KEY; out_msg.protocol_version = slurmdbd_translate_rpc(cluster_rec->rpc_version); slurm_send_node_msg(fd, &out_msg); /* We probably need to add matching recv_msg function * for an arbitray fd or should these be fire * and forget? For this, that we can probably * forget about it */ slurm_close_stream(fd); } return rc; }
extern int jobacctinfo_unpack(jobacctinfo_t **jobacct, uint16_t rpc_version, uint16_t protocol_type, Buf buffer) { uint32_t uint32_tmp; if (!plugin_polling && (protocol_type != PROTOCOL_TYPE_DBD)) return SLURM_SUCCESS; /* The function can take calls from both DBD and from regular * SLURM functions. We choose to standardize on using the * SLURM_PROTOCOL_VERSION here so if PROTOCOL_TYPE_DBD comes * in we need to translate the DBD rpc_version to use the * SLURM protocol_version. * * If this function ever changes make sure the * slurmdbd_translate_rpc function has been updated with the * new protocol version. */ if (protocol_type == PROTOCOL_TYPE_DBD) rpc_version = slurmdbd_translate_rpc(rpc_version); if (rpc_version >= SLURM_2_6_PROTOCOL_VERSION) { *jobacct = xmalloc(sizeof(struct jobacctinfo)); safe_unpack32(&uint32_tmp, buffer); (*jobacct)->user_cpu_sec = uint32_tmp; safe_unpack32(&uint32_tmp, buffer); (*jobacct)->user_cpu_usec = uint32_tmp; safe_unpack32(&uint32_tmp, buffer); (*jobacct)->sys_cpu_sec = uint32_tmp; safe_unpack32(&uint32_tmp, buffer); (*jobacct)->sys_cpu_usec = uint32_tmp; safe_unpack32(&(*jobacct)->max_vsize, buffer); safe_unpack32(&(*jobacct)->tot_vsize, buffer); safe_unpack32(&(*jobacct)->max_rss, buffer); safe_unpack32(&(*jobacct)->tot_rss, buffer); safe_unpack32(&(*jobacct)->max_pages, buffer); safe_unpack32(&(*jobacct)->tot_pages, buffer); safe_unpack32(&(*jobacct)->min_cpu, buffer); safe_unpack32(&(*jobacct)->tot_cpu, buffer); safe_unpack32(&(*jobacct)->act_cpufreq, buffer); safe_unpack32(&(*jobacct)->energy.consumed_energy, buffer); safe_unpackdouble(&(*jobacct)->max_disk_read, buffer); safe_unpackdouble(&(*jobacct)->tot_disk_read, buffer); safe_unpackdouble(&(*jobacct)->max_disk_write, buffer); safe_unpackdouble(&(*jobacct)->tot_disk_write, buffer); if (_unpack_jobacct_id(&(*jobacct)->max_vsize_id, rpc_version, buffer) != SLURM_SUCCESS) goto unpack_error; if (_unpack_jobacct_id(&(*jobacct)->max_rss_id, rpc_version, buffer) != SLURM_SUCCESS) goto unpack_error; if (_unpack_jobacct_id(&(*jobacct)->max_pages_id, rpc_version, buffer) != SLURM_SUCCESS) goto unpack_error; if (_unpack_jobacct_id(&(*jobacct)->min_cpu_id, rpc_version, buffer) != SLURM_SUCCESS) goto unpack_error; if (_unpack_jobacct_id(&(*jobacct)->max_disk_read_id, rpc_version, buffer) != SLURM_SUCCESS) goto unpack_error; if (_unpack_jobacct_id(&(*jobacct)->max_disk_write_id, rpc_version, buffer) != SLURM_SUCCESS) goto unpack_error; } else if (rpc_version >= SLURM_2_5_PROTOCOL_VERSION) { *jobacct = xmalloc(sizeof(struct jobacctinfo)); safe_unpack32(&uint32_tmp, buffer); (*jobacct)->user_cpu_sec = uint32_tmp; safe_unpack32(&uint32_tmp, buffer); (*jobacct)->user_cpu_usec = uint32_tmp; safe_unpack32(&uint32_tmp, buffer); (*jobacct)->sys_cpu_sec = uint32_tmp; safe_unpack32(&uint32_tmp, buffer); (*jobacct)->sys_cpu_usec = uint32_tmp; safe_unpack32(&(*jobacct)->max_vsize, buffer); safe_unpack32(&(*jobacct)->tot_vsize, buffer); safe_unpack32(&(*jobacct)->max_rss, buffer); safe_unpack32(&(*jobacct)->tot_rss, buffer); safe_unpack32(&(*jobacct)->max_pages, buffer); safe_unpack32(&(*jobacct)->tot_pages, buffer); safe_unpack32(&(*jobacct)->min_cpu, buffer); safe_unpack32(&(*jobacct)->tot_cpu, buffer); safe_unpack32(&(*jobacct)->act_cpufreq, buffer); safe_unpack32(&(*jobacct)->energy.consumed_energy, buffer); if (_unpack_jobacct_id(&(*jobacct)->max_vsize_id, rpc_version, buffer) != SLURM_SUCCESS) goto unpack_error; if (_unpack_jobacct_id(&(*jobacct)->max_rss_id, rpc_version, buffer) != SLURM_SUCCESS) goto unpack_error; if (_unpack_jobacct_id(&(*jobacct)->max_pages_id, rpc_version, buffer) != SLURM_SUCCESS) goto unpack_error; if (_unpack_jobacct_id(&(*jobacct)->min_cpu_id, rpc_version, buffer) != SLURM_SUCCESS) goto unpack_error; } else { *jobacct = xmalloc(sizeof(struct jobacctinfo)); safe_unpack32(&uint32_tmp, buffer); (*jobacct)->user_cpu_sec = uint32_tmp; safe_unpack32(&uint32_tmp, buffer); (*jobacct)->user_cpu_usec = uint32_tmp; safe_unpack32(&uint32_tmp, buffer); (*jobacct)->sys_cpu_sec = uint32_tmp; safe_unpack32(&uint32_tmp, buffer); (*jobacct)->sys_cpu_usec = uint32_tmp; safe_unpack32(&(*jobacct)->max_vsize, buffer); safe_unpack32(&(*jobacct)->tot_vsize, buffer); safe_unpack32(&(*jobacct)->max_rss, buffer); safe_unpack32(&(*jobacct)->tot_rss, buffer); safe_unpack32(&(*jobacct)->max_pages, buffer); safe_unpack32(&(*jobacct)->tot_pages, buffer); safe_unpack32(&(*jobacct)->min_cpu, buffer); safe_unpack32(&(*jobacct)->tot_cpu, buffer); if (_unpack_jobacct_id(&(*jobacct)->max_vsize_id, rpc_version, buffer)!= SLURM_SUCCESS) goto unpack_error; if (_unpack_jobacct_id(&(*jobacct)->max_rss_id, rpc_version, buffer)!= SLURM_SUCCESS) goto unpack_error; if (_unpack_jobacct_id(&(*jobacct)->max_pages_id, rpc_version, buffer)!= SLURM_SUCCESS) goto unpack_error; if (_unpack_jobacct_id(&(*jobacct)->min_cpu_id, rpc_version, buffer)!= SLURM_SUCCESS) goto unpack_error; } return SLURM_SUCCESS; unpack_error: debug2("jobacctinfo_unpack: unpack_error: size_buf(buffer) %u", size_buf(buffer)); xfree(*jobacct); return SLURM_ERROR; }
extern void jobacctinfo_pack(jobacctinfo_t *jobacct, uint16_t rpc_version, uint16_t protocol_type, Buf buffer) { int i = 0; if (!plugin_polling && (protocol_type != PROTOCOL_TYPE_DBD)) return; /* The function can take calls from both DBD and from regular * SLURM functions. We choose to standardize on using the * SLURM_PROTOCOL_VERSION here so if PROTOCOL_TYPE_DBD comes * in we need to translate the DBD rpc_version to use the * SLURM protocol_version. * * If this function ever changes make sure the * slurmdbd_translate_rpc function has been updated with the * new protocol version. */ if (protocol_type == PROTOCOL_TYPE_DBD) rpc_version = slurmdbd_translate_rpc(rpc_version); if (rpc_version >= SLURM_2_6_PROTOCOL_VERSION) { if (!jobacct) { for (i = 0; i < 14; i++) pack32((uint32_t) 0, buffer); for (i = 0; i < 4; i++) packdouble((double) 0, buffer); for (i = 0; i < 6; i++) _pack_jobacct_id(NULL, rpc_version, buffer); return; } pack32((uint32_t)jobacct->user_cpu_sec, buffer); pack32((uint32_t)jobacct->user_cpu_usec, buffer); pack32((uint32_t)jobacct->sys_cpu_sec, buffer); pack32((uint32_t)jobacct->sys_cpu_usec, buffer); pack32((uint32_t)jobacct->max_vsize, buffer); pack32((uint32_t)jobacct->tot_vsize, buffer); pack32((uint32_t)jobacct->max_rss, buffer); pack32((uint32_t)jobacct->tot_rss, buffer); pack32((uint32_t)jobacct->max_pages, buffer); pack32((uint32_t)jobacct->tot_pages, buffer); pack32((uint32_t)jobacct->min_cpu, buffer); pack32((uint32_t)jobacct->tot_cpu, buffer); pack32((uint32_t)jobacct->act_cpufreq, buffer); pack32((uint32_t)jobacct->energy.consumed_energy, buffer); packdouble((double)jobacct->max_disk_read, buffer); packdouble((double)jobacct->tot_disk_read, buffer); packdouble((double)jobacct->max_disk_write, buffer); packdouble((double)jobacct->tot_disk_write, buffer); _pack_jobacct_id(&jobacct->max_vsize_id, rpc_version, buffer); _pack_jobacct_id(&jobacct->max_rss_id, rpc_version, buffer); _pack_jobacct_id(&jobacct->max_pages_id, rpc_version, buffer); _pack_jobacct_id(&jobacct->min_cpu_id, rpc_version, buffer); _pack_jobacct_id(&jobacct->max_disk_read_id, rpc_version, buffer); _pack_jobacct_id(&jobacct->max_disk_write_id, rpc_version, buffer); } else if (rpc_version >= SLURM_2_5_PROTOCOL_VERSION) { if (!jobacct) { for (i = 0; i < 14; i++) pack32((uint32_t) 0, buffer); for (i = 0; i < 4; i++) _pack_jobacct_id(NULL, rpc_version, buffer); return; } pack32((uint32_t)jobacct->user_cpu_sec, buffer); pack32((uint32_t)jobacct->user_cpu_usec, buffer); pack32((uint32_t)jobacct->sys_cpu_sec, buffer); pack32((uint32_t)jobacct->sys_cpu_usec, buffer); pack32((uint32_t)jobacct->max_vsize, buffer); pack32((uint32_t)jobacct->tot_vsize, buffer); pack32((uint32_t)jobacct->max_rss, buffer); pack32((uint32_t)jobacct->tot_rss, buffer); pack32((uint32_t)jobacct->max_pages, buffer); pack32((uint32_t)jobacct->tot_pages, buffer); pack32((uint32_t)jobacct->min_cpu, buffer); pack32((uint32_t)jobacct->tot_cpu, buffer); pack32((uint32_t)jobacct->act_cpufreq, buffer); pack32((uint32_t)jobacct->energy.consumed_energy, buffer); _pack_jobacct_id(&jobacct->max_vsize_id, rpc_version, buffer); _pack_jobacct_id(&jobacct->max_rss_id, rpc_version, buffer); _pack_jobacct_id(&jobacct->max_pages_id, rpc_version, buffer); _pack_jobacct_id(&jobacct->min_cpu_id, rpc_version, buffer); } else { if (!jobacct) { for (i = 0; i < 12; i++) pack32((uint32_t) 0, buffer); for (i = 0; i < 4; i++) _pack_jobacct_id(NULL, rpc_version, buffer); return; } pack32((uint32_t)jobacct->user_cpu_sec, buffer); pack32((uint32_t)jobacct->user_cpu_usec, buffer); pack32((uint32_t)jobacct->sys_cpu_sec, buffer); pack32((uint32_t)jobacct->sys_cpu_usec, buffer); pack32((uint32_t)jobacct->max_vsize, buffer); pack32((uint32_t)jobacct->tot_vsize, buffer); pack32((uint32_t)jobacct->max_rss, buffer); pack32((uint32_t)jobacct->tot_rss, buffer); pack32((uint32_t)jobacct->max_pages, buffer); pack32((uint32_t)jobacct->tot_pages, buffer); pack32((uint32_t)jobacct->min_cpu, buffer); pack32((uint32_t)jobacct->tot_cpu, buffer); _pack_jobacct_id(&jobacct->max_vsize_id, rpc_version, buffer); _pack_jobacct_id(&jobacct->max_rss_id, rpc_version, buffer); _pack_jobacct_id(&jobacct->max_pages_id, rpc_version, buffer); _pack_jobacct_id(&jobacct->min_cpu_id, rpc_version, buffer); } }