static int _send_fini_msg(void) { int rc; Buf buffer; dbd_fini_msg_t req; /* If the connection is already gone, we don't need to send a fini. */ if (slurm_persist_conn_writeable(slurmdbd_conn) == -1) return SLURM_SUCCESS; buffer = init_buf(1024); pack16((uint16_t) DBD_FINI, buffer); req.commit = 0; req.close_conn = 1; slurmdbd_pack_fini_msg(&req, SLURM_PROTOCOL_VERSION, buffer); rc = slurm_persist_send_msg(slurmdbd_conn, buffer); free_buf(buffer); return rc; }
extern Buf pack_slurmdbd_msg(slurmdbd_msg_t *req, uint16_t rpc_version) { Buf buffer; if (rpc_version < SLURM_MIN_PROTOCOL_VERSION) { error("slurmdbd: Invalid message version=%hu, type:%hu", rpc_version, req->msg_type); return NULL; } buffer = init_buf(MAX_DBD_MSG_LEN); pack16(req->msg_type, buffer); switch (req->msg_type) { case REQUEST_PERSIST_INIT: slurm_persist_pack_init_req_msg(req->data, buffer); break; case PERSIST_RC: slurm_persist_pack_rc_msg(req->data, buffer, rpc_version); break; case DBD_ADD_ACCOUNTS: case DBD_ADD_TRES: case DBD_ADD_ASSOCS: case DBD_ADD_CLUSTERS: case DBD_ADD_FEDERATIONS: case DBD_ADD_RES: case DBD_ADD_USERS: case DBD_GOT_ACCOUNTS: case DBD_GOT_TRES: case DBD_GOT_ASSOCS: case DBD_GOT_CLUSTERS: case DBD_GOT_EVENTS: case DBD_GOT_FEDERATIONS: case DBD_GOT_JOBS: case DBD_GOT_LIST: case DBD_GOT_PROBS: case DBD_GOT_RES: case DBD_ADD_QOS: case DBD_GOT_QOS: case DBD_GOT_RESVS: case DBD_ADD_WCKEYS: case DBD_GOT_WCKEYS: case DBD_GOT_TXN: case DBD_GOT_USERS: case DBD_GOT_CONFIG: case DBD_SEND_MULT_JOB_START: case DBD_GOT_MULT_JOB_START: case DBD_SEND_MULT_MSG: case DBD_GOT_MULT_MSG: case DBD_FIX_RUNAWAY_JOB: slurmdbd_pack_list_msg( (dbd_list_msg_t *)req->data, rpc_version, req->msg_type, buffer); break; case DBD_ADD_ACCOUNT_COORDS: case DBD_REMOVE_ACCOUNT_COORDS: _pack_acct_coord_msg( (dbd_acct_coord_msg_t *)req->data, rpc_version, buffer); break; case DBD_ARCHIVE_LOAD: slurmdb_pack_archive_rec(req->data, rpc_version, buffer); break; case DBD_CLUSTER_TRES: case DBD_FLUSH_JOBS: _pack_cluster_tres_msg( (dbd_cluster_tres_msg_t *)req->data, rpc_version, buffer); break; case DBD_GET_ACCOUNTS: case DBD_GET_TRES: case DBD_GET_ASSOCS: case DBD_GET_CLUSTERS: case DBD_GET_EVENTS: case DBD_GET_FEDERATIONS: case DBD_GET_JOBS_COND: case DBD_GET_PROBS: case DBD_GET_QOS: case DBD_GET_RESVS: case DBD_GET_RES: case DBD_GET_TXN: case DBD_GET_USERS: case DBD_GET_WCKEYS: case DBD_REMOVE_ACCOUNTS: case DBD_REMOVE_ASSOCS: case DBD_REMOVE_CLUSTERS: case DBD_REMOVE_FEDERATIONS: case DBD_REMOVE_QOS: case DBD_REMOVE_RES: case DBD_REMOVE_WCKEYS: case DBD_REMOVE_USERS: case DBD_ARCHIVE_DUMP: _pack_cond_msg( (dbd_cond_msg_t *)req->data, rpc_version, req->msg_type, buffer); break; case DBD_GET_ASSOC_USAGE: case DBD_GOT_ASSOC_USAGE: case DBD_GET_CLUSTER_USAGE: case DBD_GOT_CLUSTER_USAGE: case DBD_GET_WCKEY_USAGE: case DBD_GOT_WCKEY_USAGE: slurmdbd_pack_usage_msg( (dbd_usage_msg_t *)req->data, rpc_version, req->msg_type, buffer); break; case DBD_FINI: slurmdbd_pack_fini_msg((dbd_fini_msg_t *)req->data, rpc_version, buffer); break; case DBD_JOB_COMPLETE: _pack_job_complete_msg((dbd_job_comp_msg_t *)req->data, rpc_version, buffer); break; case DBD_JOB_START: _pack_job_start_msg(req->data, rpc_version, buffer); break; case DBD_ID_RC: slurmdbd_pack_id_rc_msg(req->data, rpc_version, buffer); break; case DBD_JOB_SUSPEND: _pack_job_suspend_msg( (dbd_job_suspend_msg_t *)req->data, rpc_version, buffer); break; case DBD_MODIFY_ACCOUNTS: case DBD_MODIFY_ASSOCS: case DBD_MODIFY_CLUSTERS: case DBD_MODIFY_FEDERATIONS: case DBD_MODIFY_JOB: case DBD_MODIFY_QOS: case DBD_MODIFY_RES: case DBD_MODIFY_USERS: _pack_modify_msg( (dbd_modify_msg_t *)req->data, rpc_version, req->msg_type, buffer); break; case DBD_NODE_STATE: _pack_node_state_msg( (dbd_node_state_msg_t *)req->data, rpc_version, buffer); break; case DBD_STEP_COMPLETE: _pack_step_complete_msg( (dbd_step_comp_msg_t *)req->data, rpc_version, buffer); break; case DBD_STEP_START: _pack_step_start_msg((dbd_step_start_msg_t *)req->data, rpc_version, buffer); break; case DBD_REGISTER_CTLD: _pack_register_ctld_msg( (dbd_register_ctld_msg_t *)req->data, rpc_version, buffer); break; case DBD_ROLL_USAGE: _pack_roll_usage_msg((dbd_roll_usage_msg_t *)req->data, rpc_version, buffer); break; case DBD_ADD_RESV: case DBD_REMOVE_RESV: case DBD_MODIFY_RESV: _pack_rec_msg( (dbd_rec_msg_t *)req->data, rpc_version, req->msg_type, buffer); break; case DBD_GET_CONFIG: packstr((char *)req->data, buffer); break; case DBD_RECONFIG: case DBD_GET_STATS: case DBD_CLEAR_STATS: case DBD_SHUTDOWN: break; default: error("slurmdbd: Invalid message type pack %u(%s:%u)", req->msg_type, slurmdbd_msg_type_2_str(req->msg_type, 1), req->msg_type); free_buf(buffer); return NULL; } return buffer; }