| /*****************************************************************************\ |
| * slurmdb_defs.h - definitions used by slurmdb api |
| ****************************************************************************** |
| * Copyright (C) 2010 Lawrence Livermore National Security. |
| * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). |
| * Written by Danny Auble da@llnl.gov, et. al. |
| * 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. |
| \*****************************************************************************/ |
| |
| #ifndef _SLURMDB_DEFS_H |
| #define _SLURMDB_DEFS_H |
| |
| #include "slurm/slurmdb.h" |
| |
| #include "src/common/persist_conn.h" |
| |
| /* Defined purge macros */ |
| #define SLURMDB_PURGE_GET_UNITS(_X) \ |
| (_X & SLURMDB_PURGE_BASE) |
| #define SLURMDB_PURGE_ARCHIVE_SET(_X) \ |
| (_X != NO_VAL && _X & SLURMDB_PURGE_ARCHIVE) |
| #define SLURMDB_PURGE_IN_HOURS(_X) \ |
| (_X != NO_VAL && _X & SLURMDB_PURGE_HOURS) |
| #define SLURMDB_PURGE_IN_DAYS(_X) \ |
| (_X != NO_VAL && _X & SLURMDB_PURGE_DAYS) |
| #define SLURMDB_PURGE_IN_MONTHS(_X) \ |
| (_X != NO_VAL && _X & SLURMDB_PURGE_MONTHS) |
| |
| /* This is used to point out constants that exist in the |
| * TRES records. This should be the same order as |
| * the enum pointing out the order in the array that is defined in |
| * src/slurmctld/slurmctld.h. If this changes please also update |
| * src/plugins/accounting_storage/filetxt/accounting_storage_filetxt.c |
| * acct_storage_p_get_tres() to reflect things as it is static. |
| */ |
| typedef enum { |
| TRES_CPU = 1, |
| TRES_MEM, |
| TRES_ENERGY, |
| TRES_NODE, |
| TRES_BILLING, |
| TRES_FS_DISK, |
| TRES_VMEM, |
| TRES_PAGES, |
| TRES_STATIC_CNT |
| } tres_types_t; |
| |
| /* These #defines are for the tres_str functions below and should be |
| * sent when flags are allowed in the functions. |
| */ |
| typedef enum { |
| TRES_STR_FLAG_NONE = 0, /* No flags, meaning by |
| * default the string |
| * will contain -1 and |
| * be unique honoring |
| * the first value found |
| * in an incoming string */ |
| TRES_STR_FLAG_ONLY_CONCAT = SLURM_BIT(1), /* Only concat the |
| * string, this will |
| * most likely trump the |
| * other flags below. */ |
| TRES_STR_FLAG_REPLACE = SLURM_BIT(2), /* Replace previous count |
| * values found, if this |
| * is not set duplicate |
| * entries will be skipped. */ |
| TRES_STR_FLAG_REMOVE = SLURM_BIT(3), /* If -1 entries are |
| * found remove them, by |
| * default they will be |
| * added to the string */ |
| TRES_STR_FLAG_SORT_ID = SLURM_BIT(4), /* sort string by ID */ |
| TRES_STR_FLAG_SIMPLE = SLURM_BIT(5), /* make a simple string */ |
| TRES_STR_FLAG_COMMA1 = SLURM_BIT(6), /* make a first char a comma */ |
| TRES_STR_FLAG_NO_NULL = SLURM_BIT(7), /* return blank string |
| * instead of NULL */ |
| TRES_STR_CONVERT_UNITS = SLURM_BIT(8), /* Convert number units */ |
| TRES_STR_FLAG_SUM = SLURM_BIT(9), /* Sum entries of the same type |
| * ignoring -1 */ |
| TRES_STR_FLAG_MAX = SLURM_BIT(10), /* Set Max value from entries of |
| * the same type ignoring -1 */ |
| TRES_STR_FLAG_MIN = SLURM_BIT(11), /* Set Min value from entries of |
| * the same type ignoring -1 */ |
| TRES_STR_FLAG_ALLOW_REAL = SLURM_BIT(12), /* Allow all counts (even |
| * zero) unless INFINITE64 or |
| * NO_VAL64 */ |
| TRES_STR_FLAG_BYTES = SLURM_BIT(13), /* Convertible Usage in Bytes */ |
| } tres_str_flags_t; |
| |
| extern slurmdb_job_rec_t *slurmdb_create_job_rec(void); |
| extern slurmdb_step_rec_t *slurmdb_create_step_rec(void); |
| extern slurmdb_assoc_usage_t *slurmdb_create_assoc_usage(int tres_cnt); |
| extern slurmdb_qos_usage_t *slurmdb_create_qos_usage(int tres_cnt); |
| |
| extern char *slurmdb_acct_flags_2_str(slurmdb_acct_flags_t flags); |
| |
| /* |
| * Parse CSV of accounting flags |
| * |
| * IN str - CSV of accounting flags to parse |
| * OUT flags_ptr - pointer to populate based on parsed flags (SLURMDB_ACCT_FLAG_*) |
| * RET SLURM_SUCCESS or error |
| */ |
| extern int str_2_slurmdb_acct_flags(const char *str, |
| slurmdb_acct_flags_t *flags_ptr); |
| extern char *slurmdb_assoc_flags_2_str(slurmdb_assoc_flags_t flags); |
| /* |
| * Parse CSV of associations flags |
| * |
| * IN str - CSV of associations flags to parse |
| * OUT flags_ptr - pointer to populate based on parsed flags (ASSOC_FLAG_*) |
| * RET SLURM_SUCCESS or error |
| */ |
| extern int str_2_slurmdb_assoc_flags(const char *str, |
| slurmdb_assoc_flags_t *flags_ptr); |
| extern char *slurmdb_cluster_fed_states_str(uint32_t states); |
| extern uint32_t str_2_cluster_fed_states(char *states); |
| extern char *slurmdb_federation_flags_str(uint32_t flags); |
| extern uint32_t str_2_federation_flags(char *flags, int option); |
| extern char *slurmdb_job_flags_str(uint32_t flags); |
| extern uint32_t str_2_job_flags(char *flags); |
| extern char *slurmdb_qos_str(list_t *qos_list, uint32_t level); |
| extern uint32_t str_2_slurmdb_qos(list_t *qos_list, char *level); |
| extern char *slurmdb_qos_flags_str(slurmdb_qos_flags_t flags); |
| extern slurmdb_qos_flags_t str_2_qos_flags(char *flags, int option); |
| extern char *slurmdb_res_flags_str(uint32_t flags); |
| extern uint32_t str_2_res_flags(char *flags, int option); |
| extern char *slurmdb_res_type_str(slurmdb_resource_type_t type); |
| |
| extern char *slurmdb_admin_level_str(slurmdb_admin_level_t level); |
| extern slurmdb_admin_level_t str_2_slurmdb_admin_level(char *level); |
| |
| /* The next three functions have pointers to assoc_list so do not |
| * destroy assoc_list before using the list returned from this function. |
| */ |
| extern list_t *slurmdb_get_hierarchical_sorted_assoc_list(list_t *assoc_list); |
| extern list_t *slurmdb_get_acct_hierarchical_rec_list(list_t *assoc_list); |
| |
| /* This reorders the list into a alphabetical hierarchy. |
| IN/OUT: assoc_list |
| */ |
| extern void slurmdb_sort_hierarchical_assoc_list(list_t *assoc_list); |
| |
| /* IN/OUT: tree_list a list of slurmdb_print_tree_t's */ |
| extern char *slurmdb_tree_name_get(char *name, char *parent, list_t *tree_list); |
| |
| extern int set_qos_bitstr_from_string(bitstr_t *valid_qos, char *names); |
| extern int set_qos_bitstr_from_list(bitstr_t *valid_qos, list_t *qos_list); |
| extern char *get_qos_complete_str_bitstr(list_t *qos_list, bitstr_t *valid_qos); |
| extern list_t *get_qos_name_list(list_t *qos_list, list_t *num_qos_list); |
| extern char *get_qos_complete_str(list_t *qos_list, list_t *num_qos_list); |
| |
| extern char *get_classification_str(uint16_t classification); |
| extern uint16_t str_2_classification(char *classification); |
| |
| extern const char *rollup_interval_to_string(int interval); |
| |
| extern char *slurmdb_problem_str_get(uint16_t problem); |
| extern uint16_t str_2_slurmdb_problem(char *problem); |
| |
| extern void log_assoc_rec(slurmdb_assoc_rec_t *assoc_ptr, list_t *qos_list); |
| |
| extern int slurmdb_report_set_start_end_time(time_t *start, time_t *end); |
| |
| extern uint32_t slurmdb_parse_purge(char *string); |
| extern char *slurmdb_purge_string(uint32_t purge, char *string, int len, |
| bool with_archive); |
| extern int slurmdb_addto_qos_char_list(list_t *char_list, list_t *qos_list, |
| char *names, int option); |
| /* |
| * send_accounting_update_persist |
| * - Send accounting update to a slurmctld over a persistent connection |
| * IN update_list: updates to send |
| * IN persist_conn: connection to send things on |
| * RET: error code |
| */ |
| extern int slurmdb_send_accounting_update_persist(list_t *update_list, |
| persist_conn_t *persist_conn); |
| extern int slurmdb_send_accounting_update(list_t *update_list, char *cluster, |
| char *host, uint16_t port, |
| uint16_t rpc_version); |
| extern slurmdb_report_cluster_rec_t *slurmdb_cluster_rec_2_report( |
| slurmdb_cluster_rec_t *cluster); |
| |
| /* OUT: out - copy grp/max/qos limits from in |
| * IN: in - what to copy from |
| */ |
| extern void slurmdb_copy_assoc_rec_limits(slurmdb_assoc_rec_t *out, |
| slurmdb_assoc_rec_t *in); |
| extern void slurmdb_copy_cluster_rec(slurmdb_cluster_rec_t *out, |
| slurmdb_cluster_rec_t *in); |
| extern void slurmdb_copy_federation_rec(slurmdb_federation_rec_t *out, |
| slurmdb_federation_rec_t *in); |
| extern void slurmdb_copy_qos_rec_limits(slurmdb_qos_rec_t *out, |
| slurmdb_qos_rec_t *in); |
| extern slurmdb_tres_rec_t *slurmdb_copy_tres_rec(slurmdb_tres_rec_t *tres); |
| extern list_t *slurmdb_copy_tres_list(list_t *tres); |
| extern list_t *slurmdb_diff_tres_list(list_t *tres_list_old, |
| list_t *tres_list_new); |
| extern list_t *slurmdb_list_copy_coord(list_t *coord_accts); |
| extern char *slurmdb_tres_string_combine_lists( |
| list_t *tres_list_old, list_t *tres_list_new); |
| /* make a tres_string from a given list |
| * IN tres - list of slurmdb_tres_rec_t's |
| * IN flags - see the TRES_STR_FLAGS above |
| * Meaningful flags are TRES_STR_FLAG_SIMPLE |
| * TRES_STR_FLAG_COMMA1 |
| * RET char * of tres_str |
| */ |
| extern char *slurmdb_make_tres_string(list_t *tres, uint32_t flags); |
| extern char *slurmdb_format_tres_str( |
| char *tres_in, list_t *full_tres_list, bool simple); |
| /* |
| * Comparator used for sorting tres by id |
| * |
| * returns: -1 tres_a < tres_b 0: tres_a == tres_b 1: tres_a > tres_b |
| * |
| */ |
| extern int slurmdb_sort_tres_by_id_asc(void *v1, void *v2); |
| |
| /* Used to turn a tres string into a list containing |
| * slurmdb_tres_rec_t's with id's or name/types and counts filled in. |
| * |
| * IN/OUT: tres_list - list created from the simple tres string |
| * IN : tres - simple string you want convert |
| * IN : flags - see the TRES_STR_FLAGS above |
| * Meaningful flags are TRES_STR_FLAG_REPLACE |
| * TRES_STR_FLAG_REMOVE |
| * TRES_STR_FLAG_SORT_ID |
| * IN : sub_tres_list - list of slurmdb_tres_rec_t * to use instead of |
| * assoc_mgr_tres_list. If NULL assoc_mgr_tres_list is |
| * used. |
| */ |
| extern void slurmdb_tres_list_from_string(list_t **tres_list, const char *tres, |
| uint32_t flags, |
| list_t *sub_tres_list); |
| |
| /* combine a name array and count array into a string */ |
| extern char *slurmdb_make_tres_string_from_arrays(char **tres_names, |
| uint64_t *tres_cnts, |
| uint32_t tres_cnt, |
| uint32_t flags); |
| |
| extern char *slurmdb_make_tres_string_from_simple( |
| char *tres_in, list_t *full_tres_list, int spec_unit, |
| uint32_t convert_flags, uint32_t tres_str_flags, char *nodes); |
| |
| /* Used to combine 2 different TRES strings together |
| * |
| * IN/OUT: tres_str_old - original simple tres string |
| * IN : tres_str_new - string you want added |
| * IN : flags - see the TRES_STR_FLAGS above |
| * Meaningful flags are TRES_STR_FLAG_ONLY_CONCAT |
| * TRES_STR_FLAG_REPLACE |
| * TRES_STR_FLAG_REMOVE |
| * TRES_STR_FLAG_SORT_ID |
| * TRES_STR_FLAG_SIMPLE |
| * TRES_STR_FLAG_COMMA1 |
| * TRES_STR_FLAG_NO_NULL |
| * RET : new tres_str_old - the new string (also sent out) |
| */ |
| extern char *slurmdb_combine_tres_strings( |
| char **tres_str_old, char *tres_str_new, uint32_t flags); |
| extern slurmdb_tres_rec_t *slurmdb_find_tres_in_string( |
| char *tres_str_in, int id); |
| extern uint64_t slurmdb_find_tres_count_in_string(char *tres_str_in, int id); |
| extern int slurmdb_find_qos_in_list_by_name(void *x, void *key); |
| extern int slurmdb_find_qos_in_list(void *x, void *key); |
| extern int slurmdb_find_selected_step_in_list(void *x, void *key); |
| extern int slurmdb_find_assoc_in_list(void *x, void *key); |
| extern int slurmdb_find_update_object_in_list(void *x, void *key); |
| extern int slurmdb_find_tres_in_list(void *x, void *key); |
| extern int slurmdb_find_tres_in_list_by_count(void *x, void *key); |
| extern int slurmdb_find_tres_in_list_by_type(void *x, void *key); |
| extern int slurmdb_find_cluster_in_list(void *x, void *key); |
| extern int slurmdb_find_cluster_accting_tres_in_list(void *x, void *key); |
| extern int slurmdb_add_cluster_accounting_to_tres_list( |
| slurmdb_cluster_accounting_rec_t *accting, |
| list_t **tres); |
| extern int slurmdb_add_accounting_to_tres_list( |
| slurmdb_accounting_rec_t *accting, |
| list_t **tres); |
| extern int slurmdb_add_time_from_count_to_tres_list( |
| slurmdb_tres_rec_t *tres_in, list_t **tres, time_t elapsed); |
| extern int slurmdb_sum_accounting_list( |
| slurmdb_cluster_accounting_rec_t *accting, |
| list_t **total_tres_acct); |
| extern void slurmdb_transfer_acct_list_2_tres( |
| list_t *accounting_list, list_t **tres); |
| extern void slurmdb_transfer_tres_time( |
| list_t **tres_list_out, char *tres_str, int elapsed); |
| |
| extern int slurmdb_get_tres_base_unit(char *tres_type); |
| extern char *slurmdb_ave_tres_usage(char *tres_string, int tasks); |
| |
| /* Setup cluster rec with plugin_id that indexes into select list */ |
| extern int slurmdb_setup_cluster_rec(slurmdb_cluster_rec_t *cluster_rec); |
| |
| extern void slurmdb_job_cond_def_start_end(slurmdb_job_cond_t *job_cond); |
| extern int slurmdb_job_sort_by_submit_time(void *v1, void *v2); |
| |
| /* |
| * Merge bitmap2 into bitmap1 creating it if it doesn't exist. |
| * Also add counts from job_cnt2 (if NULL then just add 1) to job_cnt1. |
| */ |
| extern void slurmdb_merge_grp_node_usage(bitstr_t **grp_node_bitmap1, |
| uint16_t **grp_node_job_cnt1, |
| bitstr_t *grp_node_bitmap2, |
| uint16_t *grp_node_job_cnt2); |
| |
| extern char *slurmdb_get_job_id_str(slurmdb_job_rec_t *job); |
| |
| /* |
| * Add an account to the user->coord_accts list. |
| * RETURN - 0 if not added 1 if added. |
| */ |
| extern int slurmdb_add_coord_to_user(slurmdb_user_rec_t *user, char *acct_name, |
| uint16_t direct); |
| |
| #endif |