| /****************************************************************************\ |
| * slurmdbd_defs.c - functions for use with Slurm DBD RPCs |
| ***************************************************************************** |
| * Copyright (C) SchedMD LLC. |
| * Copyright (C) 2008-2010 Lawrence Livermore National Security. |
| * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). |
| * Written by Morris Jette <jette1@llnl.gov> |
| * CODE-OCEC-09-009. All rights reserved. |
| * |
| * This file is part of Slurm, a resource management program. |
| * For details, see <https://slurm.schedmd.com/>. |
| * Please also read the included file: DISCLAIMER. |
| * |
| * Slurm is free software; you can redistribute it and/or modify it under |
| * the terms of the GNU General Public License as published by the Free |
| * Software Foundation; either version 2 of the License, or (at your option) |
| * any later version. |
| * |
| * In addition, as a special exception, the copyright holders give permission |
| * to link the code of portions of this program with the OpenSSL library under |
| * certain conditions as described in each individual source file, and |
| * distribute linked combinations including the two. You must obey the GNU |
| * General Public License in all respects for all of the code used other than |
| * OpenSSL. If you modify file(s) with this exception, you may extend this |
| * exception to your version of the file(s), but you are not obligated to do |
| * so. If you do not wish to do so, delete this exception statement from your |
| * version. If you delete this exception statement from all source files in |
| * the program, then also delete it here. |
| * |
| * Slurm is distributed in the hope that it will be useful, but WITHOUT ANY |
| * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| * details. |
| * |
| * You should have received a copy of the GNU General Public License along |
| * with Slurm; if not, write to the Free Software Foundation, Inc., |
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| \*****************************************************************************/ |
| |
| #include "src/common/slurmdbd_defs.h" |
| #include "src/interfaces/jobacct_gather.h" |
| |
| /* |
| * Define slurm-specific aliases for use by plugins, see slurm_xlator.h |
| * for details. |
| */ |
| strong_alias(slurmdbd_free_buffer, slurm_slurmdbd_free_buffer); |
| strong_alias(slurmdbd_free_list_msg, slurm_slurmdbd_free_list_msg); |
| strong_alias(slurmdbd_free_usage_msg, slurm_slurmdbd_free_usage_msg); |
| strong_alias(slurmdbd_free_id_rc_msg, slurm_slurmdbd_free_id_rc_msg); |
| |
| extern slurmdbd_msg_type_t str_2_slurmdbd_msg_type(char *msg_type) |
| { |
| if (!msg_type) { |
| return NO_VAL; |
| } else if (!xstrcasecmp(msg_type, "Fini")) { |
| return DBD_FINI; |
| } else if (!xstrcasecmp(msg_type, "Add Accounts")) { |
| return DBD_ADD_ACCOUNTS; |
| } else if (!xstrcasecmp(msg_type, "Add Accounts Cond")) { |
| return DBD_ADD_ACCOUNTS_COND; |
| } else if (!xstrcasecmp(msg_type, "Add Account Coord")) { |
| return DBD_ADD_ACCOUNT_COORDS; |
| } else if (!xstrcasecmp(msg_type, "Add TRES")) { |
| return DBD_ADD_TRES; |
| } else if (!xstrcasecmp(msg_type, "Add Associations")) { |
| return DBD_ADD_ASSOCS; |
| } else if (!xstrcasecmp(msg_type, "Add Clusters")) { |
| return DBD_ADD_CLUSTERS; |
| } else if (!xstrcasecmp(msg_type, "Add Federations")) { |
| return DBD_ADD_FEDERATIONS; |
| } else if (!xstrcasecmp(msg_type, "Add Resources")) { |
| return DBD_ADD_RES; |
| } else if (!xstrcasecmp(msg_type, "Add Users")) { |
| return DBD_ADD_USERS; |
| } else if (!xstrcasecmp(msg_type, "Add Users Cond")) { |
| return DBD_ADD_USERS_COND; |
| } else if (!xstrcasecmp(msg_type, "Cluster TRES")) { |
| return DBD_CLUSTER_TRES; |
| } else if (!xstrcasecmp(msg_type, "Flush Jobs")) { |
| return DBD_FLUSH_JOBS; |
| } else if (!xstrcasecmp(msg_type, "Get Accounts")) { |
| return DBD_GET_ACCOUNTS; |
| } else if (!xstrcasecmp(msg_type, "Get TRES")) { |
| return DBD_GET_TRES; |
| } else if (!xstrcasecmp(msg_type, "Get Associations")) { |
| return DBD_GET_ASSOCS; |
| } else if (!xstrcasecmp(msg_type, "Get Association Usage")) { |
| return DBD_GET_ASSOC_USAGE; |
| } else if (!xstrcasecmp(msg_type, "Get Clusters")) { |
| return DBD_GET_CLUSTERS; |
| } else if (!xstrcasecmp(msg_type, "Get Cluster Usage")) { |
| return DBD_GET_CLUSTER_USAGE; |
| } else if (!xstrcasecmp(msg_type, "Get Events")) { |
| return DBD_GET_EVENTS; |
| } else if (!xstrcasecmp(msg_type, "Get Federations")) { |
| return DBD_GET_FEDERATIONS; |
| } else if (!xstrcasecmp(msg_type, "Get Instances")) { |
| return DBD_GET_INSTANCES; |
| } else if (!xstrcasecmp(msg_type, "Reconfigure")) { |
| return DBD_RECONFIG; |
| } else if (!xstrcasecmp(msg_type, "Get Problems")) { |
| return DBD_GET_PROBS; |
| } else if (!xstrcasecmp(msg_type, "Get Resources")) { |
| return DBD_GET_RES; |
| } else if (!xstrcasecmp(msg_type, "Get Users")) { |
| return DBD_GET_USERS; |
| } else if (!xstrcasecmp(msg_type, "Got Accounts")) { |
| return DBD_GOT_ACCOUNTS; |
| } else if (!xstrcasecmp(msg_type, "Got TRES")) { |
| return DBD_GOT_TRES; |
| } else if (!xstrcasecmp(msg_type, "Got Associations")) { |
| return DBD_GOT_ASSOCS; |
| } else if (!xstrcasecmp(msg_type, "Got Association Usage")) { |
| return DBD_GOT_ASSOC_USAGE; |
| } else if (!xstrcasecmp(msg_type, "Got Clusters")) { |
| return DBD_GOT_CLUSTERS; |
| } else if (!xstrcasecmp(msg_type, "Got Cluster Usage")) { |
| return DBD_GOT_CLUSTER_USAGE; |
| } else if (!xstrcasecmp(msg_type, "Got Events")) { |
| return DBD_GOT_EVENTS; |
| } else if (!xstrcasecmp(msg_type, "Got Federations")) { |
| return DBD_GOT_FEDERATIONS; |
| } else if (!xstrcasecmp(msg_type, "Got Instances")) { |
| return DBD_GOT_INSTANCES; |
| } else if (!xstrcasecmp(msg_type, "Got Jobs")) { |
| return DBD_GOT_JOBS; |
| } else if (!xstrcasecmp(msg_type, "Got List")) { |
| return DBD_GOT_LIST; |
| } else if (!xstrcasecmp(msg_type, "Got Problems")) { |
| return DBD_GOT_PROBS; |
| } else if (!xstrcasecmp(msg_type, "Got Resources")) { |
| return DBD_GOT_RES; |
| } else if (!xstrcasecmp(msg_type, "Got Users")) { |
| return DBD_GOT_USERS; |
| } else if (!xstrcasecmp(msg_type, "Job Complete")) { |
| return DBD_JOB_COMPLETE; |
| } else if (!xstrcasecmp(msg_type, "Job Start")) { |
| return DBD_JOB_START; |
| } else if (!xstrcasecmp(msg_type, "Job Heavy")) { |
| return DBD_JOB_HEAVY; |
| } else if (!xstrcasecmp(msg_type, "ID RC")) { |
| return DBD_ID_RC; |
| } else if (!xstrcasecmp(msg_type, "Job Suspend")) { |
| return DBD_JOB_SUSPEND; |
| } else if (!xstrcasecmp(msg_type, "Modify Accounts")) { |
| return DBD_MODIFY_ACCOUNTS; |
| } else if (!xstrcasecmp(msg_type, "Modify Associations")) { |
| return DBD_MODIFY_ASSOCS; |
| } else if (!xstrcasecmp(msg_type, "Modify Clusters")) { |
| return DBD_MODIFY_CLUSTERS; |
| } else if (!xstrcasecmp(msg_type, "Modify Federations")) { |
| return DBD_MODIFY_FEDERATIONS; |
| } else if (!xstrcasecmp(msg_type, "Modify Job")) { |
| return DBD_MODIFY_JOB; |
| } else if (!xstrcasecmp(msg_type, "Modify QOS")) { |
| return DBD_MODIFY_QOS; |
| } else if (!xstrcasecmp(msg_type, "Modify Resources")) { |
| return DBD_MODIFY_RES; |
| } else if (!xstrcasecmp(msg_type, "Modify Users")) { |
| return DBD_MODIFY_USERS; |
| } else if (!xstrcasecmp(msg_type, "Node State")) { |
| return DBD_NODE_STATE; |
| } else if (!xstrcasecmp(msg_type, "Register Cluster")) { |
| return DBD_REGISTER_CTLD; |
| } else if (!xstrcasecmp(msg_type, "Remove Accounts")) { |
| return DBD_REMOVE_ACCOUNTS; |
| } else if (!xstrcasecmp(msg_type, "Remove Account Coords")) { |
| return DBD_REMOVE_ACCOUNT_COORDS; |
| } else if (!xstrcasecmp(msg_type, "Archive Dump")) { |
| return DBD_ARCHIVE_DUMP; |
| } else if (!xstrcasecmp(msg_type, "Archive Load")) { |
| return DBD_ARCHIVE_LOAD; |
| } else if (!xstrcasecmp(msg_type, "Remove Associations")) { |
| return DBD_REMOVE_ASSOCS; |
| } else if (!xstrcasecmp(msg_type, "Remove Clusters")) { |
| return DBD_REMOVE_CLUSTERS; |
| } else if (!xstrcasecmp(msg_type, "Remove Federations")) { |
| return DBD_REMOVE_FEDERATIONS; |
| } else if (!xstrcasecmp(msg_type, "Remove Resources")) { |
| return DBD_REMOVE_RES; |
| } else if (!xstrcasecmp(msg_type, "Remove Users")) { |
| return DBD_REMOVE_USERS; |
| } else if (!xstrcasecmp(msg_type, "Roll Usage")) { |
| return DBD_ROLL_USAGE; |
| } else if (!xstrcasecmp(msg_type, "Step Complete")) { |
| return DBD_STEP_COMPLETE; |
| } else if (!xstrcasecmp(msg_type, "Step Start")) { |
| return DBD_STEP_START; |
| } else if (!xstrcasecmp(msg_type, "Get Jobs Conditional")) { |
| return DBD_GET_JOBS_COND; |
| } else if (!xstrcasecmp(msg_type, "Get Transactions")) { |
| return DBD_GET_TXN; |
| } else if (!xstrcasecmp(msg_type, "Got Transactions")) { |
| return DBD_GOT_TXN; |
| } else if (!xstrcasecmp(msg_type, "Add QOS")) { |
| return DBD_ADD_QOS; |
| } else if (!xstrcasecmp(msg_type, "Get QOS")) { |
| return DBD_GET_QOS; |
| } else if (!xstrcasecmp(msg_type, "Got QOS")) { |
| return DBD_GOT_QOS; |
| } else if (!xstrcasecmp(msg_type, "Get QOS Usage")) { |
| return DBD_GET_QOS_USAGE; |
| } else if (!xstrcasecmp(msg_type, "Got QOS Usage")) { |
| return DBD_GOT_QOS_USAGE; |
| } else if (!xstrcasecmp(msg_type, "Remove QOS")) { |
| return DBD_REMOVE_QOS; |
| } else if (!xstrcasecmp(msg_type, "Add WCKeys")) { |
| return DBD_ADD_WCKEYS; |
| } else if (!xstrcasecmp(msg_type, "Get WCKeys")) { |
| return DBD_GET_WCKEYS; |
| } else if (!xstrcasecmp(msg_type, "Got WCKeys")) { |
| return DBD_GOT_WCKEYS; |
| } else if (!xstrcasecmp(msg_type, "Remove WCKeys")) { |
| return DBD_REMOVE_WCKEYS; |
| } else if (!xstrcasecmp(msg_type, "Get WCKey Usage")) { |
| return DBD_GET_WCKEY_USAGE; |
| } else if (!xstrcasecmp(msg_type, "Got WCKey Usage")) { |
| return DBD_GOT_WCKEY_USAGE; |
| } else if (!xstrcasecmp(msg_type, "Add Reservation")) { |
| return DBD_ADD_RESV; |
| } else if (!xstrcasecmp(msg_type, "Remove Reservation")) { |
| return DBD_REMOVE_RESV; |
| } else if (!xstrcasecmp(msg_type, "Modify Reservation")) { |
| return DBD_MODIFY_RESV; |
| } else if (!xstrcasecmp(msg_type, "Get Reservations")) { |
| return DBD_GET_RESVS; |
| } else if (!xstrcasecmp(msg_type, "Got Reservations")) { |
| return DBD_GOT_RESVS; |
| } else if (!xstrcasecmp(msg_type, "Get Config")) { |
| return DBD_GET_CONFIG; |
| } else if (!xstrcasecmp(msg_type, "Got Config")) { |
| return DBD_GOT_CONFIG; |
| } else if (!xstrcasecmp(msg_type, "Send Multiple Job Starts")) { |
| return DBD_SEND_MULT_JOB_START; |
| } else if (!xstrcasecmp(msg_type, "Got Multiple Job Starts")) { |
| return DBD_GOT_MULT_JOB_START; |
| } else if (!xstrcasecmp(msg_type, "Send Multiple Messages")) { |
| return DBD_SEND_MULT_MSG; |
| } else if (!xstrcasecmp(msg_type, "Got Multiple Message Returns")) { |
| return DBD_GOT_MULT_MSG; |
| } else if (!xstrcasecmp(msg_type, |
| "Persistent Connection Initialization")) { |
| return SLURM_PERSIST_INIT; |
| } else if (!xstrcasecmp(msg_type, |
| "Persistent TLS Connection Initialization")) { |
| return SLURM_PERSIST_INIT_TLS; |
| } else { |
| return NO_VAL; |
| } |
| |
| return NO_VAL; |
| } |
| |
| extern char *slurmdbd_msg_type_2_str(slurmdbd_msg_type_t msg_type, int get_enum) |
| { |
| static char unk_str[64]; |
| |
| switch (msg_type) { |
| case DBD_FINI: |
| if (get_enum) { |
| return "DBD_FINI"; |
| } else |
| return "Fini"; |
| break; |
| case DBD_ADD_ACCOUNTS: |
| if (get_enum) { |
| return "DBD_ADD_ACCOUNTS"; |
| } else |
| return "Add Accounts"; |
| break; |
| case DBD_ADD_ACCOUNTS_COND: |
| if (get_enum) { |
| return "DBD_ADD_ACCOUNTS_COND"; |
| } else |
| return "Add Accounts Cond"; |
| break; |
| case DBD_ADD_ACCOUNT_COORDS: |
| if (get_enum) { |
| return "DBD_ADD_ACCOUNT_COORDS"; |
| } else |
| return "Add Account Coord"; |
| break; |
| case DBD_ADD_TRES: |
| if (get_enum) { |
| return "DBD_ADD_TRES"; |
| } else |
| return "Add TRES"; |
| break; |
| case DBD_ADD_ASSOCS: |
| if (get_enum) { |
| return "DBD_ADD_ASSOCS"; |
| } else |
| return "Add Associations"; |
| break; |
| case DBD_ADD_CLUSTERS: |
| if (get_enum) { |
| return "DBD_ADD_CLUSTERS"; |
| } else |
| return "Add Clusters"; |
| break; |
| case DBD_ADD_FEDERATIONS: |
| if (get_enum) { |
| return "DBD_ADD_FEDERATIONS"; |
| } else |
| return "Add Clusters"; |
| break; |
| case DBD_ADD_RES: |
| if (get_enum) { |
| return "DBD_ADD_RES"; |
| } else |
| return "Add Resources"; |
| break; |
| case DBD_ADD_USERS: |
| if (get_enum) { |
| return "DBD_ADD_USERS"; |
| } else |
| return "Add Users"; |
| break; |
| case DBD_ADD_USERS_COND: |
| if (get_enum) { |
| return "DBD_ADD_USERS_COND"; |
| } else |
| return "Add Users Cond"; |
| break; |
| case DBD_CLUSTER_TRES: |
| if (get_enum) { |
| return "DBD_CLUSTER_TRES"; |
| } else |
| return "Cluster TRES"; |
| break; |
| case DBD_FLUSH_JOBS: |
| if (get_enum) { |
| return "DBD_FLUSH_JOBS"; |
| } else |
| return "Flush Jobs"; |
| break; |
| case DBD_GET_ACCOUNTS: |
| if (get_enum) { |
| return "DBD_GET_ACCOUNTS"; |
| } else |
| return "Get Accounts"; |
| break; |
| case DBD_GET_TRES: |
| if (get_enum) { |
| return "DBD_GET_TRES"; |
| } else |
| return "Get TRES"; |
| break; |
| case DBD_GET_ASSOCS: |
| if (get_enum) { |
| return "DBD_GET_ASSOCS"; |
| } else |
| return "Get Associations"; |
| break; |
| case DBD_GET_ASSOC_USAGE: |
| if (get_enum) { |
| return "DBD_GET_ASSOC_USAGE"; |
| } else |
| return "Get Association Usage"; |
| break; |
| case DBD_GET_CLUSTERS: |
| if (get_enum) { |
| return "DBD_GET_CLUSTERS"; |
| } else |
| return "Get Clusters"; |
| break; |
| case DBD_GET_CLUSTER_USAGE: |
| if (get_enum) { |
| return "DBD_GET_CLUSTER_USAGE"; |
| } else |
| return "Get Cluster Usage"; |
| break; |
| case DBD_GET_EVENTS: |
| if (get_enum) { |
| return "DBD_GET_EVENTS"; |
| } else |
| return "Get Events"; |
| break; |
| case DBD_GET_FEDERATIONS: |
| if (get_enum) { |
| return "DBD_GET_FEDERATIONS"; |
| } else |
| return "Get Federations"; |
| break; |
| case DBD_GET_INSTANCES: |
| if (get_enum) { |
| return "DBD_GET_INSTANCES"; |
| } else |
| return "Get Instances"; |
| break; |
| case DBD_RECONFIG: |
| if (get_enum) { |
| return "DBD_RECONFIG"; |
| } else |
| return "Reconfigure"; |
| break; |
| case DBD_GET_PROBS: |
| if (get_enum) { |
| return "DBD_GET_PROBS"; |
| } else |
| return "Get Problems"; |
| break; |
| case DBD_GET_RES: |
| if (get_enum) { |
| return "DBD_GET_RES"; |
| } else |
| return "Get Resources"; |
| break; |
| case DBD_GET_USERS: |
| if (get_enum) { |
| return "DBD_GET_USERS"; |
| } else |
| return "Get Users"; |
| break; |
| case DBD_GOT_ACCOUNTS: |
| if (get_enum) { |
| return "DBD_GOT_ACCOUNTS"; |
| } else |
| return "Got Accounts"; |
| break; |
| case DBD_GOT_TRES: |
| if (get_enum) { |
| return "DBD_GOT_TRES"; |
| } else |
| return "Got TRES"; |
| break; |
| case DBD_GOT_ASSOCS: |
| if (get_enum) { |
| return "DBD_GOT_ASSOCS"; |
| } else |
| return "Got Associations"; |
| break; |
| case DBD_GOT_ASSOC_USAGE: |
| if (get_enum) { |
| return "DBD_GOT_ASSOC_USAGE"; |
| } else |
| return "Got Association Usage"; |
| break; |
| case DBD_GOT_CLUSTERS: |
| if (get_enum) { |
| return "DBD_GOT_CLUSTERS"; |
| } else |
| return "Got Clusters"; |
| break; |
| case DBD_GOT_CLUSTER_USAGE: |
| if (get_enum) { |
| return "DBD_GOT_CLUSTER_USAGE"; |
| } else |
| return "Got Cluster Usage"; |
| break; |
| case DBD_GOT_EVENTS: |
| if (get_enum) { |
| return "DBD_GOT_EVENTS"; |
| } else |
| return "Got Events"; |
| break; |
| case DBD_GOT_FEDERATIONS: |
| if (get_enum) { |
| return "DBD_GOT_FEDERATIONS"; |
| } else |
| return "Got Federations"; |
| break; |
| case DBD_GOT_INSTANCES: |
| if (get_enum) { |
| return "DBD_GOT_INSTANCES"; |
| } else |
| return "Got Instances"; |
| break; |
| case DBD_GOT_JOBS: |
| if (get_enum) { |
| return "DBD_GOT_JOBS"; |
| } else |
| return "Got Jobs"; |
| break; |
| case DBD_GOT_LIST: |
| if (get_enum) { |
| return "DBD_GOT_LIST"; |
| } else |
| return "Got List"; |
| break; |
| case DBD_GOT_PROBS: |
| if (get_enum) { |
| return "DBD_GOT_PROBS"; |
| } else |
| return "Got Problems"; |
| break; |
| case DBD_GOT_RES: |
| if (get_enum) { |
| return "DBD_GOT_RES"; |
| } else |
| return "Got Resources"; |
| break; |
| case DBD_GOT_USERS: |
| if (get_enum) { |
| return "DBD_GOT_USERS"; |
| } else |
| return "Got Users"; |
| break; |
| case DBD_JOB_COMPLETE: |
| if (get_enum) { |
| return "DBD_JOB_COMPLETE"; |
| } else |
| return "Job Complete"; |
| break; |
| case DBD_JOB_START: |
| if (get_enum) { |
| return "DBD_JOB_START"; |
| } else |
| return "Job Start"; |
| break; |
| case DBD_JOB_HEAVY: |
| if (get_enum) { |
| return "DBD_JOB_HEAVY"; |
| } else |
| return "Job Heavy"; |
| break; |
| case DBD_ID_RC: |
| if (get_enum) { |
| return "DBD_ID_RC"; |
| } else |
| return "ID RC"; |
| break; |
| case DBD_JOB_SUSPEND: |
| if (get_enum) { |
| return "DBD_JOB_SUSPEND"; |
| } else |
| return "Job Suspend"; |
| break; |
| case DBD_MODIFY_ACCOUNTS: |
| if (get_enum) { |
| return "DBD_MODIFY_ACCOUNTS"; |
| } else |
| return "Modify Accounts"; |
| break; |
| case DBD_MODIFY_ASSOCS: |
| if (get_enum) { |
| return "DBD_MODIFY_ASSOCS"; |
| } else |
| return "Modify Associations"; |
| break; |
| case DBD_MODIFY_CLUSTERS: |
| if (get_enum) { |
| return "DBD_MODIFY_CLUSTERS"; |
| } else |
| return "Modify Clusters"; |
| break; |
| case DBD_MODIFY_FEDERATIONS: |
| if (get_enum) { |
| return "DBD_MODIFY_FEDERATIONS"; |
| } else |
| return "Modify Federations"; |
| break; |
| case DBD_MODIFY_JOB: |
| if (get_enum) { |
| return "DBD_MODIFY_JOB"; |
| } else |
| return "Modify Job"; |
| break; |
| case DBD_MODIFY_QOS: |
| if (get_enum) { |
| return "DBD_MODIFY_QOS"; |
| } else |
| return "Modify QOS"; |
| break; |
| case DBD_MODIFY_RES: |
| if (get_enum) { |
| return "DBD_MODIFY_RES"; |
| } else |
| return "Modify Resources"; |
| break; |
| case DBD_MODIFY_USERS: |
| if (get_enum) { |
| return "DBD_MODIFY_USERS"; |
| } else |
| return "Modify Users"; |
| break; |
| case DBD_NODE_STATE: |
| if (get_enum) { |
| return "DBD_NODE_STATE"; |
| } else |
| return "Node State"; |
| break; |
| case DBD_REGISTER_CTLD: |
| if (get_enum) { |
| return "DBD_REGISTER_CTLD"; |
| } else |
| return "Register Cluster"; |
| break; |
| case DBD_REMOVE_ACCOUNTS: |
| if (get_enum) { |
| return "DBD_REMOVE_ACCOUNTS"; |
| } else |
| return "Remove Accounts"; |
| break; |
| case DBD_REMOVE_ACCOUNT_COORDS: |
| if (get_enum) { |
| return "DBD_REMOVE_ACCOUNT_COORDS"; |
| } else |
| return "Remove Account Coords"; |
| break; |
| case DBD_ARCHIVE_DUMP: |
| if (get_enum) { |
| return "DBD_ARCHIVE_DUMP"; |
| } else |
| return "Archive Dump"; |
| break; |
| case DBD_ARCHIVE_LOAD: |
| if (get_enum) { |
| return "DBD_ARCHIVE_LOAD"; |
| } else |
| return "Archive Load"; |
| break; |
| case DBD_REMOVE_ASSOCS: |
| if (get_enum) { |
| return "DBD_REMOVE_ASSOCS"; |
| } else |
| return "Remove Associations"; |
| break; |
| case DBD_REMOVE_CLUSTERS: |
| if (get_enum) { |
| return "DBD_REMOVE_CLUSTERS"; |
| } else |
| return "Remove Clusters"; |
| break; |
| case DBD_REMOVE_FEDERATIONS: |
| if (get_enum) { |
| return "DBD_REMOVE_FEDERATIONS"; |
| } else |
| return "Remove Federations"; |
| break; |
| case DBD_REMOVE_RES: |
| if (get_enum) { |
| return "DBD_REMOVE_RES"; |
| } else |
| return "Remove Resources"; |
| break; |
| case DBD_REMOVE_USERS: |
| if (get_enum) { |
| return "DBD_REMOVE_USERS"; |
| } else |
| return "Remove Users"; |
| break; |
| case DBD_ROLL_USAGE: |
| if (get_enum) { |
| return "DBD_ROLL_USAGE"; |
| } else |
| return "Roll Usage"; |
| break; |
| case DBD_STEP_COMPLETE: |
| if (get_enum) { |
| return "DBD_STEP_COMPLETE"; |
| } else |
| return "Step Complete"; |
| break; |
| case DBD_STEP_START: |
| if (get_enum) { |
| return "DBD_STEP_START"; |
| } else |
| return "Step Start"; |
| break; |
| case DBD_GET_JOBS_COND: |
| if (get_enum) { |
| return "DBD_GET_JOBS_COND"; |
| } else |
| return "Get Jobs Conditional"; |
| break; |
| case DBD_GET_TXN: |
| if (get_enum) { |
| return "DBD_GET_TXN"; |
| } else |
| return "Get Transactions"; |
| break; |
| case DBD_GOT_TXN: |
| if (get_enum) { |
| return "DBD_GOT_TXN"; |
| } else |
| return "Got Transactions"; |
| break; |
| case DBD_ADD_QOS: |
| if (get_enum) { |
| return "DBD_ADD_QOS"; |
| } else |
| return "Add QOS"; |
| break; |
| case DBD_GET_QOS: |
| if (get_enum) { |
| return "DBD_GET_QOS"; |
| } else |
| return "Get QOS"; |
| break; |
| case DBD_GOT_QOS: |
| if (get_enum) { |
| return "DBD_GOT_QOS"; |
| } else |
| return "Got QOS"; |
| break; |
| case DBD_GET_QOS_USAGE: |
| if (get_enum) { |
| return "DBD_GET_QOS_USAGE"; |
| } else |
| return "Get QOS Usage"; |
| break; |
| case DBD_GOT_QOS_USAGE: |
| if (get_enum) { |
| return "DBD_GOT_QOS_USAGE"; |
| } else |
| return "Got QOS Usage"; |
| break; |
| case DBD_REMOVE_QOS: |
| if (get_enum) { |
| return "DBD_REMOVE_QOS"; |
| } else |
| return "Remove QOS"; |
| break; |
| case DBD_ADD_WCKEYS: |
| if (get_enum) { |
| return "DBD_ADD_WCKEYS"; |
| } else |
| return "Add WCKeys"; |
| break; |
| case DBD_GET_WCKEYS: |
| if (get_enum) { |
| return "DBD_GET_WCKEYS"; |
| } else |
| return "Get WCKeys"; |
| break; |
| case DBD_GOT_WCKEYS: |
| if (get_enum) { |
| return "DBD_GOT_WCKEYS"; |
| } else |
| return "Got WCKeys"; |
| break; |
| case DBD_REMOVE_WCKEYS: |
| if (get_enum) { |
| return "DBD_REMOVE_WCKEYS"; |
| } else |
| return "Remove WCKeys"; |
| break; |
| case DBD_GET_WCKEY_USAGE: |
| if (get_enum) { |
| return "DBD_GET_WCKEY_USAGE"; |
| } else |
| return "Get WCKey Usage"; |
| break; |
| case DBD_GOT_WCKEY_USAGE: |
| if (get_enum) { |
| return "DBD_GOT_WCKEY_USAGE"; |
| } else |
| return "Got WCKey Usage"; |
| break; |
| case DBD_ADD_RESV: |
| if (get_enum) { |
| return "DBD_ADD_RESV"; |
| } else |
| return "Add Reservation"; |
| break; |
| case DBD_REMOVE_RESV: |
| if (get_enum) { |
| return "DBD_REMOVE_RESV"; |
| } else |
| return "Remove Reservation"; |
| break; |
| case DBD_MODIFY_RESV: |
| if (get_enum) { |
| return "DBD_MODIFY_RESV"; |
| } else |
| return "Modify Reservation"; |
| break; |
| case DBD_GET_RESVS: |
| if (get_enum) { |
| return "DBD_GET_RESVS"; |
| } else |
| return "Get Reservations"; |
| break; |
| case DBD_GOT_RESVS: |
| if (get_enum) { |
| return "DBD_GOT_RESVS"; |
| } else |
| return "Got Reservations"; |
| break; |
| case DBD_GET_CONFIG: |
| if (get_enum) { |
| return "DBD_GET_CONFIG"; |
| } else |
| return "Get Config"; |
| break; |
| case DBD_GOT_CONFIG: |
| if (get_enum) { |
| return "DBD_GOT_CONFIG"; |
| } else |
| return "Got Config"; |
| break; |
| case DBD_SEND_MULT_JOB_START: |
| if (get_enum) { |
| return "DBD_SEND_MULT_JOB_START"; |
| } else |
| return "Send Multiple Job Starts"; |
| break; |
| case DBD_GOT_MULT_JOB_START: |
| if (get_enum) { |
| return "DBD_GOT_MULT_JOB_START"; |
| } else |
| return "Got Multiple Job Starts"; |
| break; |
| case DBD_SEND_MULT_MSG: |
| if (get_enum) { |
| return "DBD_SEND_MULT_MSG"; |
| } else |
| return "Send Multiple Messages"; |
| break; |
| case DBD_GOT_MULT_MSG: |
| if (get_enum) { |
| return "DBD_GOT_MULT_MSG"; |
| } else |
| return "Got Multiple Message Returns"; |
| break; |
| case DBD_GET_STATS: |
| if (get_enum) { |
| return "DBD_GET_STATS"; |
| } else |
| return "Get daemon statistics"; |
| break; |
| case DBD_GOT_STATS: |
| if (get_enum) { |
| return "DBD_GOT_STATS"; |
| } else |
| return "Got daemon statistics data"; |
| break; |
| case DBD_CLEAR_STATS: |
| if (get_enum) { |
| return "DBD_CLEAR_STATS"; |
| } else |
| return "Clear daemon statistics"; |
| break; |
| case DBD_SHUTDOWN: |
| if (get_enum) { |
| return "DBD_SHUTDOWN"; |
| } else |
| return "Shutdown daemon"; |
| break; |
| case SLURM_PERSIST_INIT: |
| if (get_enum) { |
| return "SLURM_PERSIST_INIT"; |
| } else |
| return "Persistent Connection Initialization"; |
| break; |
| case SLURM_PERSIST_INIT_TLS: |
| if (get_enum) { |
| return "SLURM_PERSIST_INIT_TLS"; |
| } else |
| return "Persistent TLS Connection Initialization"; |
| break; |
| default: |
| snprintf(unk_str, sizeof(unk_str), "MsgType=%d", msg_type); |
| return unk_str; |
| break; |
| } |
| } |
| |
| |
| /****************************************************************************\ |
| * Free data structures |
| \****************************************************************************/ |
| extern void slurmdbd_free_buffer(void *x) |
| { |
| buf_t *buffer = (buf_t *) x; |
| FREE_NULL_BUFFER(buffer); |
| } |
| |
| extern void slurmdbd_free_acct_coord_msg(dbd_acct_coord_msg_t *msg) |
| { |
| if (msg) { |
| FREE_NULL_LIST(msg->acct_list); |
| slurmdb_destroy_user_cond(msg->cond); |
| xfree(msg); |
| } |
| } |
| |
| extern void slurmdbd_free_cluster_tres_msg(dbd_cluster_tres_msg_t *msg) |
| { |
| if (msg) { |
| xfree(msg->cluster_nodes); |
| xfree(msg->tres_str); |
| xfree(msg); |
| } |
| } |
| |
| extern void slurmdbd_free_msg(persist_msg_t *msg) |
| { |
| switch (msg->msg_type) { |
| 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_INSTANCES: |
| 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_free_list_msg(msg->data); |
| break; |
| case DBD_ADD_ACCOUNT_COORDS: |
| case DBD_REMOVE_ACCOUNT_COORDS: |
| slurmdbd_free_acct_coord_msg(msg->data); |
| break; |
| case DBD_ARCHIVE_LOAD: |
| slurmdb_destroy_archive_rec(msg->data); |
| break; |
| case DBD_CLUSTER_TRES: |
| case DBD_FLUSH_JOBS: |
| slurmdbd_free_cluster_tres_msg(msg->data); |
| 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_INSTANCES: |
| 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: |
| slurmdbd_free_cond_msg(msg->data, msg->msg_type); |
| 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_free_usage_msg(msg->data, msg->msg_type); |
| break; |
| case DBD_FINI: |
| slurmdbd_free_fini_msg(msg->data); |
| break; |
| case DBD_JOB_COMPLETE: |
| slurmdbd_free_job_complete_msg(msg->data); |
| break; |
| case DBD_JOB_START: |
| slurmdbd_free_job_start_msg(msg->data); |
| break; |
| case DBD_JOB_HEAVY: |
| slurmdbd_free_job_heavy_msg(msg->data); |
| break; |
| case DBD_JOB_SUSPEND: |
| slurmdbd_free_job_suspend_msg(msg->data); |
| break; |
| case DBD_ADD_ACCOUNTS_COND: |
| case DBD_ADD_USERS_COND: |
| 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: |
| slurmdbd_free_modify_msg(msg->data, msg->msg_type); |
| break; |
| case DBD_NODE_STATE: |
| slurmdbd_free_node_state_msg(msg->data); |
| break; |
| case DBD_STEP_COMPLETE: |
| slurmdbd_free_step_complete_msg(msg->data); |
| break; |
| case DBD_STEP_START: |
| slurmdbd_free_step_start_msg(msg->data); |
| break; |
| case DBD_REGISTER_CTLD: |
| slurmdbd_free_register_ctld_msg(msg->data); |
| break; |
| case DBD_ROLL_USAGE: |
| slurmdbd_free_roll_usage_msg(msg->data); |
| break; |
| case DBD_ADD_RESV: |
| case DBD_REMOVE_RESV: |
| case DBD_MODIFY_RESV: |
| slurmdbd_free_rec_msg(msg->data, msg->msg_type); |
| break; |
| case DBD_GET_CONFIG: |
| case DBD_RECONFIG: |
| case DBD_GET_STATS: |
| case DBD_CLEAR_STATS: |
| case DBD_SHUTDOWN: |
| break; |
| case SLURM_PERSIST_INIT: |
| case SLURM_PERSIST_INIT_TLS: |
| slurm_free_msg(msg->data); |
| break; |
| default: |
| error("%s: Unknown rec type %d(%s)", |
| __func__, msg->msg_type, |
| slurmdbd_msg_type_2_str(msg->msg_type, true)); |
| return; |
| } |
| } |
| |
| extern void slurmdbd_free_rec_msg(dbd_rec_msg_t *msg, |
| slurmdbd_msg_type_t type) |
| { |
| void (*my_destroy) (void *object); |
| |
| if (msg) { |
| switch (type) { |
| case DBD_ADD_RESV: |
| case DBD_REMOVE_RESV: |
| case DBD_MODIFY_RESV: |
| my_destroy = slurmdb_destroy_reservation_rec; |
| break; |
| default: |
| fatal("Unknown rec type"); |
| return; |
| } |
| if (msg->rec) |
| (*(my_destroy))(msg->rec); |
| xfree(msg); |
| } |
| } |
| |
| extern void slurmdbd_free_cond_msg(dbd_cond_msg_t *msg, |
| slurmdbd_msg_type_t type) |
| { |
| void (*my_destroy) (void *object); |
| |
| if (msg) { |
| switch (type) { |
| case DBD_GET_ACCOUNTS: |
| case DBD_REMOVE_ACCOUNTS: |
| my_destroy = slurmdb_destroy_account_cond; |
| break; |
| case DBD_GET_TRES: |
| my_destroy = slurmdb_destroy_tres_cond; |
| break; |
| case DBD_GET_ASSOCS: |
| case DBD_GET_PROBS: |
| case DBD_REMOVE_ASSOCS: |
| my_destroy = slurmdb_destroy_assoc_cond; |
| break; |
| case DBD_GET_CLUSTERS: |
| case DBD_REMOVE_CLUSTERS: |
| my_destroy = slurmdb_destroy_cluster_cond; |
| break; |
| case DBD_GET_FEDERATIONS: |
| case DBD_REMOVE_FEDERATIONS: |
| my_destroy = slurmdb_destroy_federation_cond; |
| break; |
| case DBD_GET_JOBS_COND: |
| my_destroy = slurmdb_destroy_job_cond; |
| break; |
| case DBD_GET_QOS: |
| case DBD_REMOVE_QOS: |
| my_destroy = slurmdb_destroy_qos_cond; |
| break; |
| case DBD_GET_RES: |
| case DBD_REMOVE_RES: |
| my_destroy = slurmdb_destroy_res_cond; |
| break; |
| case DBD_GET_WCKEYS: |
| case DBD_REMOVE_WCKEYS: |
| my_destroy = slurmdb_destroy_wckey_cond; |
| break; |
| case DBD_GET_TXN: |
| my_destroy = slurmdb_destroy_txn_cond; |
| break; |
| case DBD_GET_USERS: |
| case DBD_REMOVE_USERS: |
| my_destroy = slurmdb_destroy_user_cond; |
| break; |
| case DBD_ARCHIVE_DUMP: |
| my_destroy = slurmdb_destroy_archive_cond; |
| break; |
| case DBD_GET_RESVS: |
| my_destroy = slurmdb_destroy_reservation_cond; |
| break; |
| case DBD_GET_EVENTS: |
| my_destroy = slurmdb_destroy_event_cond; |
| break; |
| case DBD_GET_INSTANCES: |
| my_destroy = slurmdb_destroy_instance_cond; |
| break; |
| default: |
| fatal("Unknown cond type"); |
| return; |
| } |
| if (msg->cond) |
| (*(my_destroy))(msg->cond); |
| xfree(msg); |
| } |
| } |
| |
| extern void slurmdbd_free_fini_msg(dbd_fini_msg_t *msg) |
| { |
| xfree(msg); |
| } |
| |
| extern void slurmdbd_free_job_complete_msg(dbd_job_comp_msg_t *msg) |
| { |
| if (msg) { |
| xfree(msg->admin_comment); |
| xfree(msg->comment); |
| xfree(msg->extra); |
| xfree(msg->failed_node); |
| xfree(msg->nodes); |
| xfree(msg->system_comment); |
| xfree(msg->tres_alloc_str); |
| xfree(msg); |
| } |
| } |
| |
| extern void slurmdbd_free_job_start_msg(void *in) |
| { |
| dbd_job_start_msg_t *msg = (dbd_job_start_msg_t *)in; |
| if (msg) { |
| xfree(msg->account); |
| xfree(msg->array_task_str); |
| xfree(msg->constraints); |
| xfree(msg->container); |
| xfree(msg->env_hash); |
| xfree(msg->gres_used); |
| xfree(msg->licenses); |
| xfree(msg->mcs_label); |
| xfree(msg->name); |
| xfree(msg->nodes); |
| xfree(msg->node_inx); |
| xfree(msg->partition); |
| xfree(msg->qos_req); |
| xfree(msg->resv_req); |
| xfree(msg->script_hash); |
| xfree(msg->std_err); |
| xfree(msg->std_in); |
| xfree(msg->std_out); |
| xfree(msg->submit_line); |
| xfree(msg->tres_alloc_str); |
| xfree(msg->tres_req_str); |
| xfree(msg->wckey); |
| xfree(msg->work_dir); |
| xfree(msg); |
| } |
| } |
| |
| extern void slurmdbd_free_job_heavy_msg(void *in) |
| { |
| dbd_job_heavy_msg_t *msg = in; |
| |
| if (!msg) |
| return; |
| |
| xfree(msg->env); |
| xfree(msg->env_hash); |
| xfree(msg->script); |
| FREE_NULL_BUFFER(msg->script_buf); |
| xfree(msg->script_hash); |
| xfree(msg); |
| } |
| |
| extern void slurmdbd_free_id_rc_msg(void *in) |
| { |
| dbd_id_rc_msg_t *msg = (dbd_id_rc_msg_t *)in; |
| xfree(msg); |
| } |
| |
| extern void slurmdbd_free_job_suspend_msg(dbd_job_suspend_msg_t *msg) |
| { |
| xfree(msg); |
| } |
| |
| extern void slurmdbd_free_list_msg(dbd_list_msg_t *msg) |
| { |
| if (msg) { |
| FREE_NULL_LIST(msg->my_list); |
| xfree(msg); |
| } |
| } |
| |
| extern void slurmdbd_free_modify_msg(dbd_modify_msg_t *msg, |
| slurmdbd_msg_type_t type) |
| { |
| void (*destroy_cond) (void *object); |
| void (*destroy_rec) (void *object); |
| |
| if (msg) { |
| switch (type) { |
| case DBD_ADD_ACCOUNTS_COND: |
| destroy_cond = slurmdb_destroy_add_assoc_cond; |
| destroy_rec = slurmdb_destroy_account_rec; |
| break; |
| case DBD_ADD_USERS_COND: |
| destroy_cond = slurmdb_destroy_add_assoc_cond; |
| destroy_rec = slurmdb_destroy_user_rec; |
| break; |
| case DBD_MODIFY_ACCOUNTS: |
| destroy_cond = slurmdb_destroy_account_cond; |
| destroy_rec = slurmdb_destroy_account_rec; |
| break; |
| case DBD_MODIFY_ASSOCS: |
| destroy_cond = slurmdb_destroy_assoc_cond; |
| destroy_rec = slurmdb_destroy_assoc_rec; |
| break; |
| case DBD_MODIFY_CLUSTERS: |
| destroy_cond = slurmdb_destroy_cluster_cond; |
| destroy_rec = slurmdb_destroy_cluster_rec; |
| break; |
| case DBD_MODIFY_FEDERATIONS: |
| destroy_cond = slurmdb_destroy_federation_cond; |
| destroy_rec = slurmdb_destroy_federation_rec; |
| break; |
| case DBD_MODIFY_JOB: |
| destroy_cond = slurmdb_destroy_job_cond; |
| destroy_rec = slurmdb_destroy_job_rec; |
| break; |
| case DBD_MODIFY_QOS: |
| destroy_cond = slurmdb_destroy_qos_cond; |
| destroy_rec = slurmdb_destroy_qos_rec; |
| break; |
| case DBD_MODIFY_RES: |
| destroy_cond = slurmdb_destroy_res_cond; |
| destroy_rec = slurmdb_destroy_res_rec; |
| break; |
| case DBD_MODIFY_USERS: |
| destroy_cond = slurmdb_destroy_user_cond; |
| destroy_rec = slurmdb_destroy_user_rec; |
| break; |
| default: |
| fatal("Unknown modify type"); |
| return; |
| } |
| |
| if (msg->cond) |
| (*(destroy_cond))(msg->cond); |
| if (msg->rec) |
| (*(destroy_rec))(msg->rec); |
| xfree(msg); |
| } |
| } |
| |
| extern void slurmdbd_free_node_state_msg(dbd_node_state_msg_t *msg) |
| { |
| if (msg) { |
| xfree(msg->hostlist); |
| xfree(msg->extra); |
| xfree(msg->instance_id); |
| xfree(msg->instance_type); |
| xfree(msg->reason); |
| xfree(msg->tres_str); |
| xfree(msg); |
| } |
| } |
| |
| extern void slurmdbd_free_register_ctld_msg(dbd_register_ctld_msg_t *msg) |
| { |
| xfree(msg); |
| } |
| |
| extern void slurmdbd_free_roll_usage_msg(dbd_roll_usage_msg_t *msg) |
| { |
| xfree(msg); |
| } |
| |
| extern void slurmdbd_free_step_complete_msg(dbd_step_comp_msg_t *msg) |
| { |
| if (msg) { |
| jobacctinfo_destroy(msg->jobacct); |
| xfree(msg->job_tres_alloc_str); |
| xfree(msg); |
| } |
| } |
| |
| extern void slurmdbd_free_step_start_msg(dbd_step_start_msg_t *msg) |
| { |
| if (msg) { |
| xfree(msg->container); |
| xfree(msg->name); |
| xfree(msg->nodes); |
| xfree(msg->node_inx); |
| xfree(msg->cwd); |
| xfree(msg->std_err); |
| xfree(msg->std_in); |
| xfree(msg->std_out); |
| xfree(msg->submit_line); |
| xfree(msg->tres_alloc_str); |
| xfree(msg); |
| } |
| } |
| |
| extern void slurmdbd_free_usage_msg(dbd_usage_msg_t *msg, |
| slurmdbd_msg_type_t type) |
| { |
| void (*destroy_rec) (void *object); |
| if (msg) { |
| switch (type) { |
| case DBD_GET_ASSOC_USAGE: |
| case DBD_GOT_ASSOC_USAGE: |
| destroy_rec = slurmdb_destroy_assoc_rec; |
| break; |
| case DBD_GET_CLUSTER_USAGE: |
| case DBD_GOT_CLUSTER_USAGE: |
| destroy_rec = slurmdb_destroy_cluster_rec; |
| break; |
| case DBD_GET_WCKEY_USAGE: |
| case DBD_GOT_WCKEY_USAGE: |
| destroy_rec = slurmdb_destroy_wckey_rec; |
| break; |
| default: |
| fatal("Unknown usage type"); |
| return; |
| } |
| |
| if (msg->rec) |
| (*(destroy_rec))(msg->rec); |
| xfree(msg); |
| } |
| } |