1 Star 0 Fork 0

lurenchina/metastack

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
slurmdb.h 73.88 KB
一键复制 编辑 原始数据 按行查看 历史
cluslab 提交于 2023-12-06 18:39 +08:00 . Commit Metastack 2.0 version based on Slurm 22.05.8
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124
/*****************************************************************************\
* slurmdb.h - Interface codes and functions for slurm
******************************************************************************
* Copyright (C) 2010 Lawrence Livermore National Security.
* Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
* Written by Danny Auble [email protected], 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_H
#define _SLURMDB_H
#ifdef __cplusplus
extern "C" {
#endif
#include <slurm/slurm.h>
typedef enum {
SLURMDB_ADMIN_NOTSET,
SLURMDB_ADMIN_NONE,
SLURMDB_ADMIN_OPERATOR,
SLURMDB_ADMIN_SUPER_USER
} slurmdb_admin_level_t;
typedef enum {
SLURMDB_CLASS_NONE, /* no class given */
SLURMDB_CLASS_CAPABILITY, /* capability cluster */
SLURMDB_CLASS_CAPACITY, /* capacity cluster */
SLURMDB_CLASS_CAPAPACITY, /* a cluster that is both capability
* and capacity */
} slurmdb_classification_type_t;
typedef enum {
SLURMDB_EVENT_ALL,
SLURMDB_EVENT_CLUSTER,
SLURMDB_EVENT_NODE
} slurmdb_event_type_t;
typedef enum {
SLURMDB_PROBLEM_NOT_SET,
SLURMDB_PROBLEM_ACCT_NO_ASSOC,
SLURMDB_PROBLEM_ACCT_NO_USERS,
SLURMDB_PROBLEM_USER_NO_ASSOC,
SLURMDB_PROBLEM_USER_NO_UID,
} slurmdb_problem_type_t;
typedef enum {
SLURMDB_REPORT_SORT_TIME,
SLURMDB_REPORT_SORT_NAME
} slurmdb_report_sort_t;
typedef enum {
SLURMDB_REPORT_TIME_SECS,
SLURMDB_REPORT_TIME_MINS,
SLURMDB_REPORT_TIME_HOURS,
SLURMDB_REPORT_TIME_PERCENT,
SLURMDB_REPORT_TIME_SECS_PER,
SLURMDB_REPORT_TIME_MINS_PER,
SLURMDB_REPORT_TIME_HOURS_PER,
} slurmdb_report_time_format_t;
typedef enum {
SLURMDB_RESOURCE_NOTSET,
SLURMDB_RESOURCE_LICENSE
} slurmdb_resource_type_t;
typedef enum {
SLURMDB_UPDATE_NOTSET,
SLURMDB_ADD_USER,
SLURMDB_ADD_ASSOC,
SLURMDB_ADD_COORD,
SLURMDB_MODIFY_USER,
SLURMDB_MODIFY_ASSOC,
SLURMDB_REMOVE_USER,
SLURMDB_REMOVE_ASSOC,
SLURMDB_REMOVE_COORD,
SLURMDB_ADD_QOS,
SLURMDB_REMOVE_QOS,
SLURMDB_MODIFY_QOS,
SLURMDB_ADD_WCKEY,
SLURMDB_REMOVE_WCKEY,
SLURMDB_MODIFY_WCKEY,
SLURMDB_ADD_CLUSTER,
SLURMDB_REMOVE_CLUSTER,
SLURMDB_REMOVE_ASSOC_USAGE,
SLURMDB_ADD_RES,
SLURMDB_REMOVE_RES,
SLURMDB_MODIFY_RES,
SLURMDB_REMOVE_QOS_USAGE,
SLURMDB_ADD_TRES,
SLURMDB_UPDATE_FEDS,
} slurmdb_update_type_t;
/* Define QOS flags */
#define QOS_FLAG_BASE 0x0fffffff
#define QOS_FLAG_NOTSET 0x10000000
#define QOS_FLAG_ADD 0x20000000
#define QOS_FLAG_REMOVE 0x40000000
#define QOS_FLAG_PART_MIN_NODE SLURM_BIT(0)
#define QOS_FLAG_PART_MAX_NODE SLURM_BIT(1)
#define QOS_FLAG_PART_TIME_LIMIT SLURM_BIT(2)
#define QOS_FLAG_ENFORCE_USAGE_THRES SLURM_BIT(3)
#define QOS_FLAG_NO_RESERVE SLURM_BIT(4)
#define QOS_FLAG_REQ_RESV SLURM_BIT(5)
#define QOS_FLAG_DENY_LIMIT SLURM_BIT(6)
#define QOS_FLAG_OVER_PART_QOS SLURM_BIT(7)
#define QOS_FLAG_NO_DECAY SLURM_BIT(8)
#define QOS_FLAG_USAGE_FACTOR_SAFE SLURM_BIT(9)
/* Define Server Resource flags */
#define SLURMDB_RES_FLAG_BASE 0x0fffffff /* apply to get real flags */
#define SLURMDB_RES_FLAG_NOTSET 0x10000000
#define SLURMDB_RES_FLAG_ADD 0x20000000
#define SLURMDB_RES_FLAG_REMOVE 0x40000000
/* Define Federation flags */
#define FEDERATION_FLAG_BASE 0x0fffffff
#define FEDERATION_FLAG_NOTSET 0x10000000
#define FEDERATION_FLAG_ADD 0x20000000
#define FEDERATION_FLAG_REMOVE 0x40000000
/* SLURM CLUSTER FEDERATION STATES */
enum cluster_fed_states {
CLUSTER_FED_STATE_NA,
CLUSTER_FED_STATE_ACTIVE,
CLUSTER_FED_STATE_INACTIVE
};
#define CLUSTER_FED_STATE_BASE 0x000f
#define CLUSTER_FED_STATE_FLAGS 0xfff0
#define CLUSTER_FED_STATE_DRAIN 0x0010 /* drain cluster by not accepting
any new jobs and waiting for all
federated jobs to complete.*/
#define CLUSTER_FED_STATE_REMOVE 0x0020 /* remove cluster from federation
once cluster is drained of
federated jobs */
/* flags and types of resources */
/* when we come up with some */
/*
* Translation of db_flags in job_record_t and flag
* slurmdb_job_[rec|cond]_t
*/
#define SLURMDB_JOB_FLAG_NONE 0x00000000 /* No flags */
#define SLURMDB_JOB_CLEAR_SCHED 0x0000000f /* clear scheduling bits (0-3) */
#define SLURMDB_JOB_FLAG_NOTSET SLURM_BIT(0) /* Schedule bits not set */
#define SLURMDB_JOB_FLAG_SUBMIT SLURM_BIT(1) /* Job was started on submit */
#define SLURMDB_JOB_FLAG_SCHED SLURM_BIT(2) /* Job was started from main
* scheduler */
#define SLURMDB_JOB_FLAG_BACKFILL SLURM_BIT(3) /* Job was started from
* backfill */
#define SLURMDB_JOB_FLAG_START_R SLURM_BIT(4) /* Job start rpc was recieved */
/*
* Slurm job condition flags
* slurmdb_job_cond_t
*/
#define JOBCOND_FLAG_DUP SLURM_BIT(0) /* Report duplicate job
* entries */
#define JOBCOND_FLAG_NO_STEP SLURM_BIT(1) /* Don't report job step
* info */
#define JOBCOND_FLAG_NO_TRUNC SLURM_BIT(2) /* Report info. without
* truncating the time to the
* usage_start and
* usage_end */
#define JOBCOND_FLAG_RUNAWAY SLURM_BIT(3) /* Report runaway jobs onl */
#define JOBCOND_FLAG_WHOLE_HETJOB SLURM_BIT(4) /* Report info about all
* hetjob components */
#define JOBCOND_FLAG_NO_WHOLE_HETJOB SLURM_BIT(5) /* Only report info about
* requested hetjob
* components */
#define JOBCOND_FLAG_NO_WAIT SLURM_BIT(6) /* Tell dbd plugin not to
* wait around for result. */
#define JOBCOND_FLAG_NO_DEFAULT_USAGE SLURM_BIT(7) /* Use usage_time as the
* submit_time of the job.
*/
#define JOBCOND_FLAG_SCRIPT SLURM_BIT(8) /* Get batch script only */
#define JOBCOND_FLAG_ENV SLURM_BIT(9) /* Get job's env only */
/* Archive / Purge time flags */
#define SLURMDB_PURGE_BASE 0x0000ffff /* Apply to get the number
* of units */
#define SLURMDB_PURGE_FLAGS 0xffff0000 /* apply to get the flags */
#define SLURMDB_PURGE_HOURS 0x00010000 /* Purge units are in hours */
#define SLURMDB_PURGE_DAYS 0x00020000 /* Purge units are in days */
#define SLURMDB_PURGE_MONTHS 0x00040000 /* Purge units are in months,
* the default */
#define SLURMDB_PURGE_ARCHIVE 0x00080000 /* Archive before purge */
/* Parent account should be used when calculating FairShare */
#define SLURMDB_FS_USE_PARENT 0x7FFFFFFF
#define SLURMDB_CLASSIFIED_FLAG 0x0100
#define SLURMDB_CLASS_BASE 0x00ff
/* Cluster flags */
#define CLUSTER_FLAG_A1 SLURM_BIT(0) /* UNUSED */
#define CLUSTER_FLAG_A2 SLURM_BIT(1) /* UNUSED */
#define CLUSTER_FLAG_A3 SLURM_BIT(2) /* UNUSED */
#define CLUSTER_FLAG_A4 SLURM_BIT(3) /* UNUSED */
#define CLUSTER_FLAG_A5 SLURM_BIT(4) /* UNUSED */
#define CLUSTER_FLAG_A6 SLURM_BIT(5) /* UNUSED */
#define CLUSTER_FLAG_A7 SLURM_BIT(6) /* UNUSED */
#define CLUSTER_FLAG_MULTSD SLURM_BIT(7) /* This cluster is multiple slurmd */
#define CLUSTER_FLAG_A9 SLURM_BIT(8) /* UNUSED */
#define CLUSTER_FLAG_FE SLURM_BIT(9) /* This cluster is a front end system*/
#define CLUSTER_FLAG_CRAY SLURM_BIT(10) /* This cluster is a Native cray */
#define CLUSTER_FLAG_FED SLURM_BIT(11) /* This cluster is in a federation. */
#define CLUSTER_FLAG_EXT SLURM_BIT(12) /* This cluster is external */
/* Assoc flags */
#define ASSOC_FLAG_DELETED 0x0001
/* Event condition flags */
#define SLURMDB_EVENT_COND_OPEN SLURM_BIT(0) /* Return only open events */
/********************************************/
/* Association conditions used for queries of the database */
/* slurmdb_tres_rec_t is used in other structures below so this needs
* to be declared before hand.
*/
typedef struct {
uint64_t alloc_secs; /* total amount of secs allocated if used in an
accounting_list */
uint32_t rec_count; /* number of records alloc_secs is, DON'T PACK */
uint64_t count; /* Count of TRES on a given cluster, 0 if
* listed generically. */
uint32_t id; /* Database ID for the TRES */
char *name; /* Name of TRES if type is generic like GRES
* or License. Make include optional GRES type
* (e.g. "gpu" or "gpu:tesla") */
char *type; /* Type of TRES (CPU, MEM, etc) */
} slurmdb_tres_rec_t;
/* slurmdb_assoc_cond_t is used in other structures below so
* this needs to be declared first.
*/
typedef struct {
List acct_list; /* list of char * */
List cluster_list; /* list of char * */
List def_qos_id_list; /* list of char * */
List format_list; /* list of char * */
List id_list; /* list of char */
uint16_t only_defs; /* only send back defaults */
List parent_acct_list; /* name of parent account */
List partition_list; /* list of char * */
List qos_list; /* list of char * */
time_t usage_end;
time_t usage_start;
List user_list; /* list of char * */
uint16_t with_usage; /* fill in usage */
uint16_t with_deleted; /* return deleted associations */
uint16_t with_raw_qos; /* return a raw qos or delta_qos */
uint16_t with_sub_accts; /* return sub acct information also */
uint16_t without_parent_info; /* don't give me parent id/name */
uint16_t without_parent_limits; /* don't give me limits from
* parents */
} slurmdb_assoc_cond_t;
/* slurmdb_job_cond_t is used by slurmdb_archive_cond_t so it needs to
* be defined before hand.
*/
typedef struct {
List acct_list; /* list of char * */
List associd_list; /* list of char */
List cluster_list; /* list of char * */
List constraint_list; /* list of char * */
uint32_t cpus_max; /* number of cpus high range */
uint32_t cpus_min; /* number of cpus low range */
uint32_t db_flags; /* flags sent from the slurmctld on the job */
int32_t exitcode; /* exit code of job */
uint32_t flags; /* Reporting flags*/
List format_list; /* list of char * */
List groupid_list; /* list of char * */
List jobname_list; /* list of char * */
uint32_t nodes_max; /* number of nodes high range */
uint32_t nodes_min; /* number of nodes low range */
List partition_list; /* list of char * */
List qos_list; /* list of char * */
List reason_list; /* list of char * */
List resv_list; /* list of char * */
List resvid_list; /* list of char * */
List state_list; /* list of char * */
List step_list; /* list of slurm_selected_step_t */
uint32_t timelimit_max; /* max timelimit */
uint32_t timelimit_min; /* min timelimit */
time_t usage_end;
time_t usage_start;
char *used_nodes; /* a ranged node string where jobs ran */
List userid_list; /* list of char * */
List wckey_list; /* list of char * */
} slurmdb_job_cond_t;
/* slurmdb_stats_t needs to be defined before slurmdb_job_rec_t and
* slurmdb_step_rec_t.
*/
typedef struct {
double act_cpufreq; /* contains actual average cpu frequency */
#ifdef __METASTACK_OPT_SSTAT_CPUUTIL
double cpu_util; /*cpu real-time utilization*/
double avg_cpu_util; /*cpu average utilization*/
double max_cpu_util; /*cpu max utilization*/
double min_cpu_util; /*cpu minimum utilization*/
#endif
uint64_t consumed_energy; /* contains energy consumption in joules */
char *tres_usage_in_ave; /* average amount of usage in data */
char *tres_usage_in_max; /* contains max amount of usage in data */
char *tres_usage_in_max_nodeid; /* contains node number max was on */
char *tres_usage_in_max_taskid; /* contains task number max was on */
char *tres_usage_in_min; /* contains min amount of usage in data */
char *tres_usage_in_min_nodeid; /* contains node number min was on */
char *tres_usage_in_min_taskid; /* contains task number min was on */
char *tres_usage_in_tot; /* total amount of usage in data */
char *tres_usage_out_ave; /* average amount of usage out data */
char *tres_usage_out_max; /* contains amount of max usage out data */
char *tres_usage_out_max_nodeid; /* contains node number max was on */
char *tres_usage_out_max_taskid; /* contains task number max was on */
char *tres_usage_out_min; /* contains amount of min usage out data */
char *tres_usage_out_min_nodeid; /* contains node number min was on */
char *tres_usage_out_min_taskid; /* contains task number min was on */
char *tres_usage_out_tot; /* total amount of usage out data */
} slurmdb_stats_t;
/************** alphabetical order of structures **************/
typedef struct {
slurmdb_assoc_cond_t *assoc_cond;/* use acct_list here for
names */
List description_list; /* list of char * */
List organization_list; /* list of char * */
uint16_t with_assocs;
uint16_t with_coords;
uint16_t with_deleted;
} slurmdb_account_cond_t;
enum {
SLURMDB_ACCT_FLAG_NONE = 0,
SLURMDB_ACCT_FLAG_DELETED = (1 << 0),
};
typedef struct {
List assoc_list; /* list of slurmdb_assoc_rec_t *'s */
List coordinators; /* list of slurmdb_coord_rec_t *'s */
char *description;
uint32_t flags; /* SLURMDB_ACCT_FLAG_* */
char *name;
char *organization;
} slurmdb_account_rec_t;
typedef struct {
uint64_t alloc_secs; /* number of cpu seconds allocated */
uint32_t id; /* association/wckey ID */
time_t period_start; /* when this record was started */
slurmdb_tres_rec_t tres_rec;
} slurmdb_accounting_rec_t;
typedef struct {
char *archive_dir; /* location to place archive file */
char *archive_script; /* script to run instead of default
actions */
slurmdb_job_cond_t *job_cond; /* conditions for the jobs to archive */
uint32_t purge_event; /* purge events older than this in
* months by default set the
* SLURMDB_PURGE_ARCHIVE bit for
* archiving */
uint32_t purge_job; /* purge jobs older than this in months
* by default set the
* SLURMDB_PURGE_ARCHIVE bit for
* archiving */
uint32_t purge_resv; /* purge reservations older than this in months
* by default set the
* SLURMDB_PURGE_ARCHIVE bit for
* archiving */
uint32_t purge_step; /* purge steps older than this in months
* by default set the
* SLURMDB_PURGE_ARCHIVE bit for
* archiving */
uint32_t purge_suspend; /* purge suspend data older than this
* in months by default set the
* SLURMDB_PURGE_ARCHIVE bit for
* archiving */
uint32_t purge_txn; /* purge transaction data older than this
* in months by default set the
* SLURMDB_PURGE_ARCHIVE bit for
* archiving */
uint32_t purge_usage; /* purge usage data older than this
* in months by default set the
* SLURMDB_PURGE_ARCHIVE bit for
* archiving */
} slurmdb_archive_cond_t;
typedef struct {
char *archive_file; /* archive file containing data that was
once flushed from the database */
char *insert; /* an sql statement to be ran containing the
insert of jobs since past */
} slurmdb_archive_rec_t;
typedef struct {
uint64_t count; /* Count of tres on a given cluster, 0 if
listed generically. */
List format_list;/* list of char * */
List id_list; /* Database ID */
List name_list; /* Name of tres if type is generic like GRES
or License. */
List type_list; /* Type of tres (CPU, MEM, etc) */
uint16_t with_deleted;
} slurmdb_tres_cond_t;
/* slurmdb_tres_rec_t is defined above alphabetical */
/* slurmdb_assoc_cond_t is defined above alphabetical */
/* This has slurmdb_assoc_rec_t's in it so we define the struct afterwards. */
typedef struct slurmdb_assoc_usage slurmdb_assoc_usage_t;
typedef struct slurmdb_bf_usage slurmdb_bf_usage_t;
typedef struct slurmdb_user_rec slurmdb_user_rec_t;
typedef struct slurmdb_assoc_rec {
List accounting_list; /* list of slurmdb_accounting_rec_t *'s */
char *acct; /* account/project associated to
* assoc */
struct slurmdb_assoc_rec *assoc_next; /* next assoc with
* same hash index
* based off the
* account/user
* DOESN'T GET PACKED */
struct slurmdb_assoc_rec *assoc_next_id; /* next assoc with
* same hash index
* DOESN'T GET PACKED */
#ifdef __METASTACK_NEW_PART_PARA_SCHED
pthread_mutex_t assoc_sched_lock; /* assoc lock */
bool is_lock_init; /* true: assoc lock has been initialized */
#endif
slurmdb_bf_usage_t *bf_usage; /* data for backfill scheduler,
* (DON'T PACK) */
char *cluster; /* cluster associated to association */
uint32_t def_qos_id; /* Which QOS id is this
* associations default */
uint16_t flags; /* various flags see ASSOC_FLAG_* */
uint32_t grp_jobs; /* max number of jobs the
* underlying group of associations can run
* at one time */
uint32_t grp_jobs_accrue; /* max number of jobs the
* underlying group of associations can have
* accruing priority at one time */
uint32_t grp_submit_jobs; /* max number of jobs the
* underlying group of
* associations can submit at
* one time */
char *grp_tres; /* max number of cpus the
* underlying group of
* associations can allocate at one time */
uint64_t *grp_tres_ctld; /* grp_tres broken out in an array
* based off the ordering of the total
* number of TRES in the system
* (DON'T PACK) */
char *grp_tres_mins; /* max number of cpu minutes the
* underlying group of
* associations can run for */
uint64_t *grp_tres_mins_ctld; /* grp_tres_mins broken out in an array
* based off the ordering of the total
* number of TRES in the system
* (DON'T PACK) */
char *grp_tres_run_mins; /* max number of cpu minutes the
* underlying group of
* assoiciations can
* having running at one time */
uint64_t *grp_tres_run_mins_ctld; /* grp_tres_run_mins
* broken out in an array
* based off the ordering
* of the total number of TRES in
* the system
* (DON'T PACK) */
uint32_t grp_wall; /* total time in hours the
* underlying group of
* associations can run for */
uint32_t id; /* id identifing a combination of
* user-account-cluster(-partition) */
uint16_t is_def; /* Is this the users default assoc/acct */
slurmdb_assoc_usage_t *leaf_usage; /* Points to usage for user assocs.
* Holds usage of deleted users in
* parent assocs (DON'T PACK) */
uint32_t lft; /* lft used for grouping sub
* associations and jobs as a left
* most container used with rgt */
uint32_t max_jobs; /* max number of jobs this
* association can run at one time */
uint32_t max_jobs_accrue; /* max number of jobs this association can
* have accruing priority time.
*/
uint32_t max_submit_jobs; /* max number of jobs that can be
submitted by association */
char *max_tres_mins_pj; /* max number of cpu minutes this
* association can have per job */
uint64_t *max_tres_mins_ctld; /* max_tres_mins broken out in an array
* based off the ordering of the
* total number of TRES in the system
* (DON'T PACK) */
char *max_tres_run_mins; /* max number of cpu minutes this
* association can
* having running at one time */
uint64_t *max_tres_run_mins_ctld; /* max_tres_run_mins
* broken out in an array
* based off the ordering
* of the total number of TRES in
* the system
* (DON'T PACK) */
char *max_tres_pj; /* max number of cpus this
* association can allocate per job */
uint64_t *max_tres_ctld; /* max_tres broken out in an array
* based off the ordering of the
* total number of TRES in the system
* (DON'T PACK) */
char *max_tres_pn; /* max number of TRES this
* association can allocate per node */
uint64_t *max_tres_pn_ctld; /* max_tres_pn broken out in an array
* based off the ordering of the
* total number of TRES in the system
* (DON'T PACK) */
uint32_t max_wall_pj; /* longest time this
* association can run a job */
uint32_t min_prio_thresh; /* Don't reserve resources for pending jobs
* unless they have a priority equal to or
* higher than this. */
char *parent_acct; /* name of parent account */
uint32_t parent_id; /* id of parent account */
char *partition; /* optional partition in a cluster
* associated to association */
uint32_t priority; /* association priority */
List qos_list; /* list of char * */
uint32_t rgt; /* rgt used for grouping sub
* associations and jobs as a right
* most container used with lft */
uint32_t shares_raw; /* number of shares allocated to
* association */
uint32_t uid; /* user ID */
slurmdb_assoc_usage_t *usage;
char *user; /* user associated to assoc */
slurmdb_user_rec_t *user_rec; /* Cache of user record
* soft ref - mem not managed here
* (DON'T PACK)
*/
} slurmdb_assoc_rec_t;
struct slurmdb_assoc_usage {
uint32_t accrue_cnt; /* Count of how many jobs I have accuring prio
* (DON'T PACK for state file) */
List children_list; /* list of children associations
* (DON'T PACK) */
bitstr_t *grp_node_bitmap; /* Bitmap of allocated nodes
* (DON'T PACK) */
uint16_t *grp_node_job_cnt; /* Count of jobs allocated on each node
* (DON'T PACK) */
uint64_t *grp_used_tres; /* array of active tres counts
* (DON'T PACK for state file) */
uint64_t *grp_used_tres_run_secs; /* array of running tres secs
* (DON'T PACK for state file) */
double grp_used_wall; /* group count of time used in running jobs */
double fs_factor; /* Fairshare factor. Not used by all algorithms
* (DON'T PACK for state file) */
uint32_t level_shares; /* number of shares on this level of
* the tree (DON'T PACK for state file) */
slurmdb_assoc_rec_t *parent_assoc_ptr; /* ptr to direct
* parent assoc
* set in slurmctld
* (DON'T PACK) */
double priority_norm; /* normalized priority (DON'T PACK for
* state file) */
slurmdb_assoc_rec_t *fs_assoc_ptr; /* ptr to fairshare parent
* assoc if fairshare
* == SLURMDB_FS_USE_PARENT
* set in slurmctld
* (DON'T PACK) */
double shares_norm; /* normalized shares
* (DON'T PACK for state file) */
uint32_t tres_cnt; /* size of the tres arrays,
* (DON'T PACK for state file) */
long double usage_efctv;/* effective, normalized usage
* (DON'T PACK for state file) */
long double usage_norm; /* normalized usage
* (DON'T PACK for state file) */
long double usage_raw; /* measure of TRESBillableUnits usage */
long double *usage_tres_raw; /* measure of each TRES usage */
uint32_t used_jobs; /* count of active jobs
* (DON'T PACK for state file) */
uint32_t used_submit_jobs; /* count of jobs pending or running
* (DON'T PACK for state file) */
/* Currently FAIR_TREE systems are defining data on
* this struct but instead we could keep a void pointer to system
* specific data. This would allow subsystems to define whatever data
* they need without having to modify this struct; it would also save
* space.
*/
long double level_fs; /* (FAIR_TREE) Result of fairshare equation
* compared to the association's siblings
* (DON'T PACK for state file) */
bitstr_t *valid_qos; /* qos available for this association
* derived from the qos_list.
* (DON'T PACK for state file) */
};
struct slurmdb_bf_usage {
uint64_t count;
time_t last_sched;
};
typedef struct {
uint16_t classification; /* how this machine is classified */
List cluster_list; /* list of char * */
List federation_list; /* list of char */
uint32_t flags;
List format_list; /* list of char * */
List plugin_id_select_list; /* list of char * */
List rpc_version_list; /* list of char * */
time_t usage_end;
time_t usage_start;
uint16_t with_deleted;
uint16_t with_usage;
} slurmdb_cluster_cond_t;
typedef struct {
List feature_list; /* list of cluster features */
uint32_t id; /* id of cluster in federation */
char *name; /* Federation name */
void *recv; /* slurm_persist_conn_t we recv information about this
* sibling on. (We get this information) */
void *send; /* slurm_persist_conn_t we send information to this
* cluster on. (We set this information) */
uint32_t state; /* state of cluster in federation */
bool sync_recvd; /* true sync jobs from sib has been processed. */
bool sync_sent; /* true after sib sent sync jobs to sibling */
} slurmdb_cluster_fed_t;
struct slurmdb_cluster_rec {
List accounting_list; /* list of slurmdb_cluster_accounting_rec_t *'s */
uint16_t classification; /* how this machine is classified */
time_t comm_fail_time; /* avoid constant error messages. For
* convenience only. DOESN'T GET PACKED */
slurm_addr_t control_addr; /* For convenience only.
* DOESN'T GET PACKED */
char *control_host;
uint32_t control_port;
uint16_t dimensions; /* number of dimensions this cluster is */
int *dim_size; /* For convenience only.
* Size of each dimension For now only on
* a bluegene cluster. DOESN'T GET
* PACKED, is set up in slurmdb_get_info_cluster */
slurmdb_cluster_fed_t fed; /* Federation information */
uint32_t flags; /* set of CLUSTER_FLAG_* */
pthread_mutex_t lock; /* For convenience only. DOESN"T GET PACKED */
char *name;
char *nodes;
uint32_t plugin_id_select; /* id of the select plugin */
slurmdb_assoc_rec_t *root_assoc; /* root assoc for
* cluster */
uint16_t rpc_version; /* rpc version this cluster is running */
List send_rpc; /* For convenience only. DOESN'T GET PACKED */
char *tres_str; /* comma separated list of TRES */
};
#ifndef __slurmdb_cluster_rec_t_defined
# define __slurmdb_cluster_rec_t_defined
typedef struct slurmdb_cluster_rec slurmdb_cluster_rec_t;
#endif
typedef struct {
uint64_t alloc_secs; /* number of cpu seconds allocated */
uint64_t down_secs; /* number of cpu seconds down */
uint64_t idle_secs; /* number of cpu seconds idle */
uint64_t over_secs; /* number of cpu seconds overcommitted */
uint64_t pdown_secs; /* number of cpu seconds planned down */
time_t period_start; /* when this record was started */
uint64_t plan_secs; /* number of cpu seconds planned */
slurmdb_tres_rec_t tres_rec;
} slurmdb_cluster_accounting_rec_t;
typedef struct {
char *cluster; /* name of cluster */
uint16_t percent_allowed; /* percentage of total resources
* allowed for this cluster */
} slurmdb_clus_res_rec_t;
typedef struct {
char *name;
uint16_t direct;
} slurmdb_coord_rec_t;
typedef struct {
List cluster_list; /* list of char * */
uint32_t cond_flags; /* condition flags */
uint32_t cpus_max; /* number of cpus high range */
uint32_t cpus_min; /* number of cpus low range */
uint16_t event_type; /* type of events (slurmdb_event_type_t),
* default is all */
List format_list; /* list of char * */
char *node_list; /* node list string */
time_t period_end; /* period end of events */
time_t period_start; /* period start of events */
List reason_list; /* list of char * */
List reason_uid_list; /* list of char * */
List state_list; /* list of char * */
} slurmdb_event_cond_t;
typedef struct {
char *cluster; /* Name of associated cluster */
char *cluster_nodes; /* node list in cluster during time
* period (only set in a cluster event) */
uint16_t event_type; /* type of event (slurmdb_event_type_t) */
char *node_name; /* Name of node (only set in a node event) */
time_t period_end; /* End of period */
time_t period_start; /* Start of period */
char *reason; /* reason node is in state during time
period (only set in a node event) */
uint32_t reason_uid; /* uid of that who set the reason */
uint32_t state; /* State of node during time
period (only set in a node event) */
char *tres_str; /* TRES touched by this event */
} slurmdb_event_rec_t;
typedef struct {
List cluster_list; /* list of char * */
List federation_list; /* list of char * */
List format_list; /* list of char * */
uint16_t with_deleted;
} slurmdb_federation_cond_t;
typedef struct {
char *name; /* Name of federation */
uint32_t flags; /* flags to control scheduling on controller */
List cluster_list; /* List of slurmdb_cluster_rec_t *'s */
} slurmdb_federation_rec_t;
/* slurmdb_job_cond_t is defined above alphabetical */
typedef struct {
char *account;
char *admin_comment;
uint32_t alloc_nodes;
uint32_t array_job_id; /* job_id of a job array or 0 if N/A */
uint32_t array_max_tasks; /* How many tasks of the array can be
running at one time.
*/
uint32_t array_task_id; /* task_id of a job array of NO_VAL
* if N/A */
char *array_task_str; /* If pending these are the array
tasks this record represents.
*/
uint32_t associd;
char *blockid;
char *cluster;
char *constraints;
char *container; /* OCI Container Bundle path */
uint64_t db_index; /* index in the table */
uint32_t derived_ec;
char *derived_es; /* aka "comment" */
uint32_t elapsed;
time_t eligible;
time_t end;
char *env;
uint32_t exitcode;
uint32_t flags;
void *first_step_ptr;
uint32_t gid;
uint32_t het_job_id;
uint32_t het_job_offset;
uint32_t jobid;
char *jobname;
uint32_t lft;
char *mcs_label;
char *nodes;
char *partition;
uint32_t priority;
uint32_t qosid;
uint32_t req_cpus;
uint64_t req_mem;
uint32_t requid;
uint32_t resvid;
char *resv_name;
char *script;
uint32_t show_full;
time_t start;
uint32_t state;
uint32_t state_reason_prev;
List steps; /* list of slurmdb_step_rec_t *'s */
time_t submit;
char *submit_line;
uint32_t suspended;
char *system_comment;
uint64_t sys_cpu_sec;
uint64_t sys_cpu_usec;
uint32_t timelimit;
uint64_t tot_cpu_sec;
uint64_t tot_cpu_usec;
char *tres_alloc_str;
char *tres_req_str;
uint32_t uid;
char *used_gres;
char *user;
uint64_t user_cpu_sec;
uint64_t user_cpu_usec;
char *wckey;
uint32_t wckeyid;
char *work_dir;
#ifdef __METASTACK_OPT_SACCT_COMMAND
char *command;
#endif
#ifdef __METASTACK_OPT_SACCT_OUTPUT
char *stdout;
char *stderr;
#endif
#ifdef __METASTACK_OPT_RESC_NODEDETAIL
char *resource_node_detail;
#endif
} slurmdb_job_rec_t;
typedef struct {
uint32_t accrue_cnt; /* Count of how many jobs I have accuring prio
* (DON'T PACK for state file) */
List acct_limit_list; /* slurmdb_used_limits_t's (DON'T PACK
* for state file) */
List job_list; /* list of job pointers to submitted/running
jobs (DON'T PACK) */
bitstr_t *grp_node_bitmap; /* Bitmap of allocated nodes
* (DON'T PACK) */
uint16_t *grp_node_job_cnt; /* Count of jobs allocated on each node
* (DON'T PACK) */
uint32_t grp_used_jobs; /* count of active jobs (DON'T PACK
* for state file) */
uint32_t grp_used_submit_jobs; /* count of jobs pending or running
* (DON'T PACK for state file) */
uint64_t *grp_used_tres; /* count of tres in use in this qos
* (DON'T PACK for state file) */
uint64_t *grp_used_tres_run_secs; /* count of running tres secs
* (DON'T PACK for state file) */
double grp_used_wall; /* group count of time (minutes) used in
* running jobs */
double norm_priority;/* normalized priority (DON'T PACK for
* state file) */
uint32_t tres_cnt; /* size of the tres arrays,
* (DON'T PACK for state file) */
long double usage_raw; /* measure of resource usage */
long double *usage_tres_raw; /* measure of each TRES usage */
List user_limit_list; /* slurmdb_used_limits_t's (DON'T PACK
* for state file) */
} slurmdb_qos_usage_t;
typedef struct {
char *description;
uint32_t id;
uint32_t flags; /* flags for various things to enforce or
override other limits */
uint32_t grace_time; /* preemption grace time */
uint32_t grp_jobs_accrue; /* max number of jobs this qos can
* have accruing priority time
*/
uint32_t grp_jobs; /* max number of jobs this qos can run
* at one time */
uint32_t grp_submit_jobs; /* max number of jobs this qos can submit at
* one time */
char *grp_tres; /* max number of tres this qos can
* allocate at one time */
uint64_t *grp_tres_ctld; /* grp_tres broken out in an array
* based off the ordering of the total
* number of TRES in the system
* (DON'T PACK) */
char *grp_tres_mins; /* max number of tres minutes this
* qos can run for */
uint64_t *grp_tres_mins_ctld; /* grp_tres_mins broken out in an array
* based off the ordering of the total
* number of TRES in the system
* (DON'T PACK) */
char *grp_tres_run_mins; /* max number of tres minutes this
* qos can have running at one time */
uint64_t *grp_tres_run_mins_ctld; /* grp_tres_run_mins
* broken out in an array
* based off the ordering
* of the total number of TRES in
* the system
* (DON'T PACK) */
uint32_t grp_wall; /* total time in hours this qos can run for */
double limit_factor; /* factor to apply to tres_cnt for associations
* using this qos */
uint32_t max_jobs_pa; /* max number of jobs an account can
* run with this qos at one time */
uint32_t max_jobs_pu; /* max number of jobs a user can
* run with this qos at one time */
uint32_t max_jobs_accrue_pa; /* max number of jobs an account can
* have accruing priority time
*/
uint32_t max_jobs_accrue_pu; /* max number of jobs a user can
* have accruing priority time
*/
uint32_t max_submit_jobs_pa; /* max number of jobs an account can
submit with this qos at once */
uint32_t max_submit_jobs_pu; /* max number of jobs a user can
submit with this qos at once */
char *max_tres_mins_pj; /* max number of tres minutes this
* qos can have per job */
uint64_t *max_tres_mins_pj_ctld; /* max_tres_mins broken out in an array
* based off the ordering of the
* total number of TRES in the system
* (DON'T PACK) */
char *max_tres_pa; /* max number of tres this
* QOS can allocate per account */
uint64_t *max_tres_pa_ctld; /* max_tres_pa broken out in an array
* based off the ordering of the
* total number of TRES in the system
* (DON'T PACK) */
char *max_tres_pj; /* max number of tres this
* qos can allocate per job */
uint64_t *max_tres_pj_ctld; /* max_tres_pj broken out in an array
* based off the ordering of the
* total number of TRES in the system
* (DON'T PACK) */
char *max_tres_pn; /* max number of tres this
* qos can allocate per job */
uint64_t *max_tres_pn_ctld; /* max_tres_pj broken out in an array
* based off the ordering of the
* total number of TRES in the system
* (DON'T PACK) */
char *max_tres_pu; /* max number of tres this
* QOS can allocate per user */
uint64_t *max_tres_pu_ctld; /* max_tres broken out in an array
* based off the ordering of the
* total number of TRES in the system
* (DON'T PACK) */
char *max_tres_run_mins_pa; /* max number of tres minutes this
* qos can having running at one
* time per account, currently
* this doesn't do anything.
*/
uint64_t *max_tres_run_mins_pa_ctld; /* max_tres_run_mins_pa
* broken out in an array
* based off the ordering
* of the total number of TRES in
* the system, currently
* this doesn't do anything.
* (DON'T PACK) */
char *max_tres_run_mins_pu; /* max number of tres minutes this
* qos can having running at one
* time, currently this doesn't
* do anything.
*/
uint64_t *max_tres_run_mins_pu_ctld; /* max_tres_run_mins_pu
* broken out in an array
* based off the ordering
* of the total number of TRES in
* the system, currently
* this doesn't do anything.
* (DON'T PACK) */
uint32_t max_wall_pj; /* longest time this
* qos can run a job */
uint32_t min_prio_thresh; /* Don't reserve resources for pending jobs
* unless they have a priority equal to or
* higher than this. */
char *min_tres_pj; /* min number of tres a job can
* allocate with this qos */
uint64_t *min_tres_pj_ctld; /* min_tres_pj broken out in an array
* based off the ordering of the
* total number of TRES in the system
* (DON'T PACK) */
char *name;
bitstr_t *preempt_bitstr; /* other qos' this qos can preempt */
List preempt_list; /* list of char *'s only used to add or
* change the other qos' this can preempt,
* when doing a get use the preempt_bitstr */
uint16_t preempt_mode; /* See PREEMPT_MODE_* in slurm/slurm.h */
uint32_t preempt_exempt_time; /* Job run time before becoming
eligible for preemption */
uint32_t priority; /* ranged int needs to be a unint for
* heterogeneous systems */
#ifdef __METASTACK_NEW_PART_PARA_SCHED
pthread_mutex_t qos_sched_lock; /* qos lock */
bool is_lock_init; /* true: qos lock has been initialized */
#endif
slurmdb_qos_usage_t *usage; /* For internal use only, DON'T PACK */
double usage_factor; /* factor to apply to usage in this qos */
double usage_thres; /* percent of effective usage of an
association when breached will deny
pending and new jobs */
time_t blocked_until; /* internal use only, DON'T PACK */
} slurmdb_qos_rec_t;
typedef struct {
List description_list; /* list of char * */
List id_list; /* list of char * */
List format_list;/* list of char * */
List name_list; /* list of char * */
uint16_t preempt_mode; /* See PREEMPT_MODE_* in slurm/slurm.h */
uint16_t with_deleted;
} slurmdb_qos_cond_t;
typedef struct {
List cluster_list; /* cluster reservations are on list of
* char * */
uint64_t flags; /* flags for reservation. */
List format_list;/* list of char * */
List id_list; /* ids of reservations. list of char * */
List name_list; /* name of reservations. list of char * */
char *nodes; /* list of nodes in reservation */
time_t time_end; /* end time of reservation */
time_t time_start; /* start time of reservation */
uint16_t with_usage; /* send usage for reservation */
} slurmdb_reservation_cond_t;
typedef struct {
char *assocs; /* comma separated list of associations */
char *cluster; /* cluster reservation is for */
uint64_t flags; /* flags for reservation. */
uint32_t id; /* id of reservation. */
char *name; /* name of reservation */
char *nodes; /* list of nodes in reservation */
char *node_inx; /* node index of nodes in reservation */
time_t time_end; /* end time of reservation */
time_t time_start; /* start time of reservation */
time_t time_start_prev; /* If start time was changed this is
* the pervious start time. Needed
* for accounting */
char *tres_str;
double unused_wall; /* amount of seconds this reservation wasn't used */
List tres_list; /* list of slurmdb_tres_rec_t, only set when
* job usage is requested.
*/
} slurmdb_reservation_rec_t;
typedef struct {
char *container;
uint32_t elapsed;
time_t end;
int32_t exitcode;
slurmdb_job_rec_t *job_ptr;
uint32_t nnodes;
char *nodes;
uint32_t ntasks;
char *pid_str;
uint32_t req_cpufreq_min;
uint32_t req_cpufreq_max;
uint32_t req_cpufreq_gov;
uint32_t requid;
time_t start;
uint32_t state;
slurmdb_stats_t stats;
slurm_step_id_t step_id; /* job's step number */
char *stepname;
char *submit_line;
uint32_t suspended;
uint64_t sys_cpu_sec;
uint32_t sys_cpu_usec;
uint32_t task_dist;
uint64_t tot_cpu_sec;
uint32_t tot_cpu_usec;
char *tres_alloc_str;
uint64_t user_cpu_sec;
uint32_t user_cpu_usec;
} slurmdb_step_rec_t;
/* slurmdb_stats_t defined above alphabetical */
typedef struct {
List cluster_list; /* list of char * */
List description_list; /* list of char * */
uint32_t flags;
List format_list;/* list of char * */
List id_list; /* list of char * */
List manager_list; /* list of char * */
List name_list; /* list of char * */
List percent_list; /* list of char * */
List server_list; /* list of char * */
List type_list; /* list of char * */
uint16_t with_deleted;
uint16_t with_clusters;
} slurmdb_res_cond_t;
typedef struct {
List clus_res_list; /* list of slurmdb_clus_res_rec_t *'s */
slurmdb_clus_res_rec_t *clus_res_rec; /* if only one cluster
being represented */
uint32_t count; /* count of resources managed on the server */
char *description;
uint32_t flags; /* resource attribute flags */
uint32_t id;
char *manager; /* resource manager name */
char *name;
uint16_t percent_used;
char *server; /* resource server name */
uint32_t type; /* resource type */
} slurmdb_res_rec_t;
typedef struct {
List acct_list; /* list of char * */
List action_list; /* list of char * */
List actor_list; /* list of char * */
List cluster_list; /* list of char * */
List format_list;/* list of char * */
List id_list; /* list of char * */
List info_list; /* list of char * */
List name_list; /* list of char * */
time_t time_end;
time_t time_start;
List user_list; /* list of char * */
uint16_t with_assoc_info;
} slurmdb_txn_cond_t;
typedef struct {
char *accts;
uint16_t action;
char *actor_name;
char *clusters;
uint32_t id;
char *set_info;
time_t timestamp;
char *users;
char *where_query;
} slurmdb_txn_rec_t;
/* Right now this is used in the slurmdb_qos_rec_t structure. In the
* user_limit_list and acct_limit_list. */
typedef struct {
uint32_t accrue_cnt; /* count of jobs accruing prio */
char *acct; /* If limits for an account this is the accounts name */
uint32_t jobs; /* count of active jobs */
uint32_t submit_jobs; /* count of jobs pending or running */
uint64_t *tres; /* array of TRES allocated */
uint64_t *tres_run_mins; /* array of how many TRES mins are
* allocated currently, currently this doesn't
* do anything and isn't set up. */
bitstr_t *node_bitmap; /* Bitmap of allocated nodes */
uint16_t *node_job_cnt; /* Count of jobs allocated on each node */
uint32_t uid; /* If limits for a user this is the users uid */
} slurmdb_used_limits_t;
typedef struct {
uint16_t admin_level; /* really slurmdb_admin_level_t but for
packing purposes needs to be uint16_t */
slurmdb_assoc_cond_t *assoc_cond; /* use user_list here for
names and acct_list for
default accounts */
List def_acct_list; /* list of char * (We can't really use
* the assoc_cond->acct_list for this
* because then it is impossible for us
* to tell which accounts are defaults
* and which ones aren't, especially when
* dealing with other versions.)*/
List def_wckey_list; /* list of char * */
uint16_t with_assocs;
uint16_t with_coords;
uint16_t with_deleted;
uint16_t with_wckeys;
uint16_t without_defaults;
} slurmdb_user_cond_t;
enum {
SLURMDB_USER_FLAG_NONE = 0,
SLURMDB_USER_FLAG_DELETED = (1 << 0),
};
struct slurmdb_user_rec {
uint16_t admin_level; /* really slurmdb_admin_level_t but for
packing purposes needs to be uint16_t */
List assoc_list; /* list of slurmdb_assoc_rec_t *'s */
slurmdb_bf_usage_t *bf_usage; /* data for backfill scheduler,
* (DON'T PACK) */
List coord_accts; /* list of slurmdb_coord_rec_t *'s */
char *default_acct;
char *default_wckey;
uint32_t flags; /* SLURMDB_USER_FLAG_* */
char *name;
char *old_name;
uint32_t uid;
List wckey_list; /* list of slurmdb_wckey_rec_t *'s */
};
typedef struct {
List objects; /* depending on type */
uint16_t type; /* really slurmdb_update_type_t but for
* packing purposes needs to be a
* uint16_t */
} slurmdb_update_object_t;
typedef struct {
List cluster_list; /* list of char * */
List format_list; /* list of char * */
List id_list; /* list of char * */
List name_list; /* list of char * */
uint16_t only_defs; /* only give me the defaults */
time_t usage_end;
time_t usage_start;
List user_list; /* list of char * */
uint16_t with_usage; /* fill in usage */
uint16_t with_deleted; /* return deleted associations */
} slurmdb_wckey_cond_t;
enum {
SLURMDB_WCKEY_FLAG_NONE = 0,
SLURMDB_WCKEY_FLAG_DELETED = (1 << 0),
};
typedef struct {
List accounting_list; /* list of slurmdb_accounting_rec_t *'s */
char *cluster; /* cluster associated */
uint32_t flags; /* SLURMDB_WCKEY_FLAG_* */
uint32_t id; /* id identifing a combination of
* user-wckey-cluster */
uint16_t is_def; /* Is this the users default wckey */
char *name; /* wckey name */
uint32_t uid; /* user ID */
char *user; /* user associated */
} slurmdb_wckey_rec_t;
typedef struct {
char *name;
char *print_name;
char *spaces;
uint16_t user; /* set to 1 if it is a user i.e. if name[0] is
* '|' */
} slurmdb_print_tree_t;
typedef struct {
slurmdb_assoc_rec_t *assoc;
char *sort_name;
List children;
} slurmdb_hierarchical_rec_t;
/************** report specific structures **************/
typedef struct {
char *acct;
char *cluster;
char *parent_acct;
List tres_list; /* list of slurmdb_tres_rec_t *'s */
char *user;
} slurmdb_report_assoc_rec_t;
typedef struct {
char *acct;
List acct_list; /* list of char *'s */
List assoc_list; /* list of slurmdb_report_assoc_rec_t's */
char *name;
List tres_list; /* list of slurmdb_tres_rec_t *'s */
uid_t uid;
} slurmdb_report_user_rec_t;
typedef struct {
List accounting_list; /* list of slurmdb_accounting_rec_t *'s */
List assoc_list; /* list of slurmdb_report_assoc_rec_t *'s */
char *name;
List tres_list; /* list of slurmdb_tres_rec_t *'s */
List user_list; /* list of slurmdb_report_user_rec_t *'s */
} slurmdb_report_cluster_rec_t;
typedef struct {
uint32_t count; /* count of jobs */
List jobs; /* This should be a NULL destroy since we are just
* putting a pointer to a slurmdb_job_rec_t here
* not allocating any new memory */
uint32_t min_size; /* smallest size of job in cpus here 0 if first */
uint32_t max_size; /* largest size of job in cpus here INFINITE if
* last */
List tres_list; /* list of slurmdb_tres_rec_t *'s */
} slurmdb_report_job_grouping_t;
typedef struct {
char *acct; /* account name */
uint32_t count; /* total count of jobs taken up by this acct */
List groups; /* containing slurmdb_report_job_grouping_t's*/
uint32_t lft;
uint32_t rgt;
List tres_list; /* list of slurmdb_tres_rec_t *'s */
} slurmdb_report_acct_grouping_t;
typedef struct {
List acct_list; /* containing slurmdb_report_acct_grouping_t's */
char *cluster; /* cluster name */
uint32_t count; /* total count of jobs taken up by this cluster */
List tres_list; /* list of slurmdb_tres_rec_t *'s */
} slurmdb_report_cluster_grouping_t;
enum {
DBD_ROLLUP_HOUR,
DBD_ROLLUP_DAY,
DBD_ROLLUP_MONTH,
DBD_ROLLUP_COUNT
};
typedef struct {
char *cluster_name; /* Cluster name */
uint16_t count[DBD_ROLLUP_COUNT]; /* How many rollups have
* happened in time period */
time_t timestamp[DBD_ROLLUP_COUNT]; /* Timestamps of last rollup. */
uint64_t time_last[DBD_ROLLUP_COUNT]; /* Last rollup time */
uint64_t time_max[DBD_ROLLUP_COUNT]; /* What was the longest time
* for each rollup */
uint64_t time_total[DBD_ROLLUP_COUNT]; /* Time it took to do each
* rollup */
} slurmdb_rollup_stats_t;
typedef struct {
uint32_t cnt; /* count of object processed */
uint32_t id; /* ID of object */
uint64_t time; /* total usecs this object */
uint64_t time_ave; /* ave usecs this object (DON'T PACK) */
} slurmdb_rpc_obj_t;
typedef struct {
slurmdb_rollup_stats_t *dbd_rollup_stats;
List rollup_stats; /* List of Clusters rollup stats */
List rpc_list; /* list of RPCs sent to the dbd. */
time_t time_start; /* When we started collecting data */
List user_list; /* list of users issuing RPCs */
} slurmdb_stats_rec_t;
/* global variable for cross cluster communication */
extern slurmdb_cluster_rec_t *working_cluster_rec;
/************** account functions **************/
/*
* add accounts to accounting system
* IN: account_list List of slurmdb_account_rec_t *
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*/
extern int slurmdb_accounts_add(void *db_conn, List acct_list);
/*
* get info from the storage
* IN: slurmdb_account_cond_t *
* IN: params void *
* returns List of slurmdb_account_rec_t *
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_accounts_get(void *db_conn,
slurmdb_account_cond_t *acct_cond);
/*
* modify existing accounts in the accounting system
* IN: slurmdb_acct_cond_t *acct_cond
* IN: slurmdb_account_rec_t *acct
* RET: List containing (char *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_accounts_modify(void *db_conn,
slurmdb_account_cond_t *acct_cond,
slurmdb_account_rec_t *acct);
/*
* remove accounts from accounting system
* IN: slurmdb_account_cond_t *acct_cond
* RET: List containing (char *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_accounts_remove(void *db_conn,
slurmdb_account_cond_t *acct_cond);
/************** archive functions **************/
/*
* expire old info from the storage
*/
extern int slurmdb_archive(void *db_conn, slurmdb_archive_cond_t *arch_cond);
/*
* expire old info from the storage
*/
extern int slurmdb_archive_load(void *db_conn,
slurmdb_archive_rec_t *arch_rec);
/************** association functions **************/
/*
* add associations to accounting system
* IN: assoc_list List of slurmdb_assoc_rec_t *
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*/
extern int slurmdb_associations_add(void *db_conn, List assoc_list);
/*
* get info from the storage
* IN: slurmdb_assoc_cond_t *
* RET: List of slurmdb_assoc_rec_t *
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_associations_get(void *db_conn,
slurmdb_assoc_cond_t *assoc_cond);
/*
* modify existing associations in the accounting system
* IN: slurmdb_assoc_cond_t *assoc_cond
* IN: slurmdb_assoc_rec_t *assoc
* RET: List containing (char *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_associations_modify(void *db_conn,
slurmdb_assoc_cond_t *assoc_cond,
slurmdb_assoc_rec_t *assoc);
/*
* remove associations from accounting system
* IN: slurmdb_assoc_cond_t *assoc_cond
* RET: List containing (char *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_associations_remove(void *db_conn,
slurmdb_assoc_cond_t *assoc_cond);
/************** cluster functions **************/
/*
* add clusters to accounting system
* IN: cluster_list List of slurmdb_cluster_rec_t *
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*/
extern int slurmdb_clusters_add(void *db_conn, List cluster_list);
/*
* get info from the storage
* IN: slurmdb_cluster_cond_t *
* IN: params void *
* returns List of slurmdb_cluster_rec_t *
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_clusters_get(void *db_conn,
slurmdb_cluster_cond_t *cluster_cond);
/*
* modify existing clusters in the accounting system
* IN: slurmdb_cluster_cond_t *cluster_cond
* IN: slurmdb_cluster_rec_t *cluster
* RET: List containing (char *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_clusters_modify(void *db_conn,
slurmdb_cluster_cond_t *cluster_cond,
slurmdb_cluster_rec_t *cluster);
/*
* remove clusters from accounting system
* IN: slurmdb_cluster_cond_t *cluster_cond
* RET: List containing (char *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_clusters_remove(void *db_conn,
slurmdb_cluster_cond_t *cluster_cond);
/************** cluster report functions **************/
/* report for clusters of account per user
* IN: slurmdb_assoc_cond_t *assoc_cond
* RET: List containing (slurmdb_report_cluster_rec_t *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_report_cluster_account_by_user(void *db_conn,
slurmdb_assoc_cond_t *assoc_cond);
/* report for clusters of users per account
* IN: slurmdb_assoc_cond_t *assoc_cond
* RET: List containing (slurmdb_report_cluster_rec_t *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_report_cluster_user_by_account(void *db_conn,
slurmdb_assoc_cond_t *assoc_cond);
/* report for clusters of wckey per user
* IN: slurmdb_wckey_cond_t *wckey_cond
* RET: List containing (slurmdb_report_cluster_rec_t *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_report_cluster_wckey_by_user(void *db_conn,
slurmdb_wckey_cond_t *wckey_cond);
/* report for clusters of users per wckey
* IN: slurmdb_wckey_cond_t *wckey_cond
* RET: List containing (slurmdb_report_cluster_rec_t *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_report_cluster_user_by_wckey(void *db_conn,
slurmdb_wckey_cond_t *wckey_cond);
extern List slurmdb_report_job_sizes_grouped_by_account(
void *db_conn,
slurmdb_job_cond_t *job_cond,
List grouping_list,
bool flat_view,
bool acct_as_parent);
extern List slurmdb_report_job_sizes_grouped_by_wckey(void *db_conn,
slurmdb_job_cond_t *job_cond,
List grouping_list);
extern List slurmdb_report_job_sizes_grouped_by_account_then_wckey(
void *db_conn,
slurmdb_job_cond_t *job_cond,
List grouping_list,
bool flat_view,
bool acct_as_parent);
/* report on users with top usage
* IN: slurmdb_user_cond_t *user_cond
* IN: group_accounts - Whether or not to group all accounts together
* for each user. If 0 a separate entry for each
* user and account reference is displayed.
* RET: List containing (slurmdb_report_cluster_rec_t *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_report_user_top_usage(void *db_conn,
slurmdb_user_cond_t *user_cond,
bool group_accounts);
/************** connection functions **************/
/*
* get a new connection to the slurmdb
* OUT: persist_conn_flags - Flags returned from connection if any see
* slurm_persist_conn.h.
* RET: pointer used to access db
*/
extern void *slurmdb_connection_get(uint16_t *persist_conn_flags);
/*
* release connection to the storage unit
* IN/OUT: void ** pointer returned from
* slurmdb_connection_get() which will be freed.
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*/
extern int slurmdb_connection_close(void **db_conn);
/*
* commit or rollback changes made without closing connection
* IN: void * pointer returned from slurmdb_connection_get()
* IN: bool - true will commit changes false will rollback
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*/
extern int slurmdb_connection_commit(void *db_conn, bool commit);
/************** coordinator functions **************/
/*
* add users as account coordinators
* IN: acct_list list of char *'s of names of accounts
* IN: slurmdb_user_cond_t *user_cond
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*/
extern int slurmdb_coord_add(void *db_conn,
List acct_list,
slurmdb_user_cond_t *user_cond);
/*
* remove users from being a coordinator of an account
* IN: acct_list list of char *'s of names of accounts
* IN: slurmdb_user_cond_t *user_cond
* RET: List containing (char *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_coord_remove(void *db_conn, List acct_list,
slurmdb_user_cond_t *user_cond);
/*************** Federation functions **************/
/*
* add federations to accounting system
* IN: list List of slurmdb_federation_rec_t *
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*/
extern int slurmdb_federations_add(void *db_conn, List federation_list);
/*
* modify existing federations in the accounting system
* IN: slurmdb_federation_cond_t *fed_cond
* IN: slurmdb_federation_rec_t *fed
* RET: List containing (char *'s) else NULL on error
*/
extern List slurmdb_federations_modify(void *db_conn,
slurmdb_federation_cond_t *fed_cond,
slurmdb_federation_rec_t *fed);
/*
* remove federations from accounting system
* IN: slurmdb_federation_cond_t *fed_cond
* RET: List containing (char *'s) else NULL on error
*/
extern List slurmdb_federations_remove(void *db_conn,
slurmdb_federation_cond_t *fed_cond);
/*
* get info from the storage
* IN: slurmdb_federation_cond_t *
* RET: List of slurmdb_federation_rec_t *
* note List needs to be freed when called
*/
extern List slurmdb_federations_get(void *db_conn,
slurmdb_federation_cond_t *fed_cond);
/*************** Job functions **************/
/*
* modify existing job in the accounting system
* IN: slurmdb_job_cond_t *job_cond
* IN: slurmdb_job_rec_t *job
* RET: List containing (char *'s) else NULL on error
*/
extern List slurmdb_job_modify(void *db_conn,
slurmdb_job_cond_t *job_cond,
slurmdb_job_rec_t *job);
/*
* get info from the storage
* returns List of slurmdb_job_rec_t *
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_jobs_get(void *db_conn, slurmdb_job_cond_t *job_cond);
/*
* Fix runaway jobs
* IN: jobs, a list of all the runaway jobs
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*/
extern int slurmdb_jobs_fix_runaway(void *db_conn, List jobs);
/* initialization of job completion logging */
extern int slurmdb_jobcomp_init(char *jobcomp_loc);
/* terminate pthreads and free, general clean-up for termination */
extern int slurmdb_jobcomp_fini(void);
/*
* get info from the storage
* returns List of jobcomp_job_rec_t *
* note List needs to be freed when called
*/
extern List slurmdb_jobcomp_jobs_get(slurmdb_job_cond_t *job_cond);
/************** extra get functions **************/
/*
* reconfigure the slurmdbd
*/
extern int slurmdb_reconfig(void *db_conn);
/*
* shutdown the slurmdbd
*/
extern int slurmdb_shutdown(void *db_conn);
/*
* clear the slurmdbd statistics
*/
extern int slurmdb_clear_stats(void *db_conn);
/*
* get the slurmdbd statistics
* Call slurmdb_destroy_stats_rec() to free stats_pptr
*/
extern int slurmdb_get_stats(void *db_conn, slurmdb_stats_rec_t **stats_pptr);
/*
* get info from the storage
* RET: List of config_key_pair_t *
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_config_get(void *db_conn);
/*
* get info from the storage
* IN: slurmdb_event_cond_t *
* RET: List of slurmdb_event_rec_t *
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_events_get(void *db_conn,
slurmdb_event_cond_t *event_cond);
/*
* get info from the storage
* IN: slurmdb_assoc_cond_t *
* RET: List of slurmdb_assoc_rec_t *
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_problems_get(void *db_conn,
slurmdb_assoc_cond_t *assoc_cond);
/*
* get info from the storage
* IN: slurmdb_reservation_cond_t *
* RET: List of slurmdb_reservation_rec_t *
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_reservations_get(void *db_conn,
slurmdb_reservation_cond_t *resv_cond);
/*
* get info from the storage
* IN: slurmdb_txn_cond_t *
* RET: List of slurmdb_txn_rec_t *
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_txn_get(void *db_conn, slurmdb_txn_cond_t *txn_cond);
/*
* Get information about requested cluster(s). Similar to
* slurmdb_clusters_get, but should be used when setting up the
* working_cluster_rec. It replaces the plugin_id_select with
* the position of the id in the select plugin array, as well as sets up the
* control_addr and dim_size parts of the structure.
*
* IN: cluster_names - comma separated string of cluster names
* RET: List of slurmdb_cluster_rec_t *
* note List needs to bbe freed with slurm_list_destroy() when called
*/
extern List slurmdb_get_info_cluster(char *cluster_names);
/*
* get the first cluster that will run a job
* IN: req - description of resource allocation request
* IN: cluster_names - comma separated string of cluster names
* OUT: cluster_rec - record of selected cluster or NULL if none found or
* cluster_names is NULL
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*
* Note: Cluster_rec needs to be freed with slurmdb_destroy_cluster_rec() when
* called
* Note: The will_runs are not threaded. Currently it relies on the
* working_cluster_rec to pack the job_desc's jobinfo. See previous commit for
* an example of how to thread this.
*/
extern int slurmdb_get_first_avail_cluster(job_desc_msg_t *req,
char *cluster_names,
slurmdb_cluster_rec_t **cluster_rec);
/*
* get the first cluster that will run a heterogeneous job
* IN: req - description of resource allocation request
* IN: cluster_names - comma separated string of cluster names
* OUT: cluster_rec - record of selected cluster or NULL if none found or
* cluster_names is NULL
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*
* Note: Cluster_rec needs to be freed with slurmdb_destroy_cluster_rec() when
* called
* Note: The will_runs are not threaded. Currently it relies on the
* working_cluster_rec to pack the job_desc's jobinfo. See previous commit for
* an example of how to thread this.
*/
extern int slurmdb_get_first_het_job_cluster(List job_req_list,
char *cluster_names, slurmdb_cluster_rec_t **cluster_rec);
/************** helper functions **************/
extern void slurmdb_destroy_assoc_usage(void *object);
extern void slurmdb_destroy_bf_usage(void *object);
extern void slurmdb_destroy_bf_usage_members(void *object);
extern void slurmdb_destroy_qos_usage(void *object);
extern void slurmdb_destroy_user_rec(void *object);
extern void slurmdb_destroy_account_rec(void *object);
extern void slurmdb_destroy_coord_rec(void *object);
extern void slurmdb_destroy_clus_res_rec(void *object);
extern void slurmdb_destroy_cluster_accounting_rec(void *object);
extern void slurmdb_destroy_cluster_rec(void *object);
extern void slurmdb_destroy_federation_rec(void *object);
extern void slurmdb_destroy_accounting_rec(void *object);
extern void slurmdb_free_assoc_mgr_state_msg(void *object);
extern void slurmdb_free_assoc_rec_members(slurmdb_assoc_rec_t *assoc);
extern void slurmdb_destroy_assoc_rec(void *object);
extern void slurmdb_destroy_event_rec(void *object);
extern void slurmdb_destroy_job_rec(void *object);
extern void slurmdb_free_qos_rec_members(slurmdb_qos_rec_t *qos);
extern void slurmdb_destroy_qos_rec(void *object);
extern void slurmdb_destroy_reservation_rec(void *object);
extern void slurmdb_destroy_step_rec(void *object);
extern void slurmdb_destroy_res_rec(void *object);
extern void slurmdb_destroy_txn_rec(void *object);
extern void slurmdb_destroy_wckey_rec(void *object);
extern void slurmdb_destroy_archive_rec(void *object);
extern void slurmdb_destroy_tres_rec_noalloc(void *object);
extern void slurmdb_destroy_tres_rec(void *object);
extern void slurmdb_destroy_report_assoc_rec(void *object);
extern void slurmdb_destroy_report_user_rec(void *object);
extern void slurmdb_destroy_report_cluster_rec(void *object);
extern void slurmdb_destroy_user_cond(void *object);
extern void slurmdb_destroy_account_cond(void *object);
extern void slurmdb_destroy_cluster_cond(void *object);
extern void slurmdb_destroy_federation_cond(void *object);
extern void slurmdb_destroy_tres_cond(void *object);
extern void slurmdb_destroy_assoc_cond(void *object);
extern void slurmdb_destroy_event_cond(void *object);
extern void slurmdb_destroy_job_cond(void *object);
extern void slurmdb_destroy_qos_cond(void *object);
extern void slurmdb_destroy_reservation_cond(void *object);
extern void slurmdb_destroy_res_cond(void *object);
extern void slurmdb_destroy_txn_cond(void *object);
extern void slurmdb_destroy_wckey_cond(void *object);
extern void slurmdb_destroy_archive_cond(void *object);
extern void slurmdb_destroy_update_object(void *object);
extern void slurmdb_destroy_used_limits(void *object);
extern void slurmdb_destroy_print_tree(void *object);
extern void slurmdb_destroy_hierarchical_rec(void *object);
extern void slurmdb_destroy_report_job_grouping(void *object);
extern void slurmdb_destroy_report_acct_grouping(void *object);
extern void slurmdb_destroy_report_cluster_grouping(void *object);
extern void slurmdb_destroy_rpc_obj(void *object);
extern void slurmdb_destroy_rollup_stats(void *object);
extern void slurmdb_free_stats_rec_members(void *object);
extern void slurmdb_destroy_stats_rec(void *object);
extern void slurmdb_free_slurmdb_stats_members(slurmdb_stats_t *stats);
extern void slurmdb_destroy_slurmdb_stats(slurmdb_stats_t *stats);
extern void slurmdb_init_assoc_rec(slurmdb_assoc_rec_t *assoc,
bool free_it);
extern void slurmdb_init_clus_res_rec(slurmdb_clus_res_rec_t *clus_res,
bool free_it);
extern void slurmdb_init_cluster_rec(slurmdb_cluster_rec_t *cluster,
bool free_it);
extern void slurmdb_init_federation_rec(slurmdb_federation_rec_t *federation,
bool free_it);
extern void slurmdb_init_qos_rec(slurmdb_qos_rec_t *qos,
bool free_it,
uint32_t init_val);
extern void slurmdb_init_res_rec(slurmdb_res_rec_t *res,
bool free_it);
extern void slurmdb_init_wckey_rec(slurmdb_wckey_rec_t *wckey,
bool free_it);
extern void slurmdb_init_tres_cond(slurmdb_tres_cond_t *tres,
bool free_it);
extern void slurmdb_init_cluster_cond(slurmdb_cluster_cond_t *cluster,
bool free_it);
extern void slurmdb_init_federation_cond(slurmdb_federation_cond_t *federation,
bool free_it);
extern void slurmdb_init_res_cond(slurmdb_res_cond_t *cluster,
bool free_it);
/* The next two functions have pointers to assoc_list so do not
* destroy assoc_list before using the list returned from this function.
*/
extern List slurmdb_get_hierarchical_sorted_assoc_list(
List assoc_list, bool use_lft);
extern List slurmdb_get_acct_hierarchical_rec_list(List 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 tree_list);
/************** job report functions **************/
/************** resource functions **************/
/*
* add resource's to accounting system
* IN: res_list List of char *
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*/
extern int slurmdb_res_add(void *db_conn, List res_list);
/*
* get info from the storage
* IN: slurmdb_res_cond_t *
* RET: List of slurmdb_res_rec_t *
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_res_get(void *db_conn, slurmdb_res_cond_t *res_cond);
/*
* modify existing resource in the accounting system
* IN: slurmdb_res_cond_t *res_cond
* IN: slurmdb_res_rec_t *res
* RET: List containing (char *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_res_modify(void *db_conn,
slurmdb_res_cond_t *res_cond,
slurmdb_res_rec_t *res);
/*
* remove resource from accounting system
* IN: slurmdb_res_cond_t *res
* RET: List containing (char *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_res_remove(void *db_conn, slurmdb_res_cond_t *res_cond);
/************** qos functions **************/
/*
* add qos's to accounting system
* IN: qos_list List of char *
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*/
extern int slurmdb_qos_add(void *db_conn, List qos_list);
/*
* get info from the storage
* IN: slurmdb_qos_cond_t *
* RET: List of slurmdb_qos_rec_t *
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_qos_get(void *db_conn, slurmdb_qos_cond_t *qos_cond);
/*
* modify existing qos in the accounting system
* IN: slurmdb_qos_cond_t *qos_cond
* IN: slurmdb_qos_rec_t *qos
* RET: List containing (char *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_qos_modify(void *db_conn,
slurmdb_qos_cond_t *qos_cond,
slurmdb_qos_rec_t *qos);
/*
* remove qos from accounting system
* IN: slurmdb_qos_cond_t *assoc_qos
* RET: List containing (char *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_qos_remove(void *db_conn, slurmdb_qos_cond_t *qos_cond);
/************** tres functions **************/
/*
* add tres's to accounting system
* IN: tres_list List of char *
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*/
extern int slurmdb_tres_add(void *db_conn, List tres_list);
/*
* get info from the storage
* IN: slurmdb_tres_cond_t *
* RET: List of slurmdb_tres_rec_t *
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_tres_get(void *db_conn, slurmdb_tres_cond_t *tres_cond);
/************** usage functions **************/
/*
* get info from the storage
* IN/OUT: in void * (slurmdb_assoc_rec_t *) or
* (slurmdb_wckey_rec_t *) of (slurmdb_cluster_rec_t *) with
* the id, and cluster set.
* IN: type what type is 'in'
* IN: start time stamp for records >=
* IN: end time stamp for records <=
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*/
extern int slurmdb_usage_get(void *db_conn,
void *in,
int type,
time_t start,
time_t end);
/*
* roll up data in the storage
* IN: sent_start (option time to do a re-roll or start from this point)
* IN: sent_end (option time to do a re-roll or end at this point)
* IN: archive_data (if 0 old data is not archived in a monthly rollup)
* OUT: rollup_stats_list_in (list containing stats about each clusters rollup)
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*/
extern int slurmdb_usage_roll(void *db_conn,
time_t sent_start,
time_t sent_end,
uint16_t archive_data,
List *rollup_stats_list_in);
/************** user functions **************/
/*
* add users to accounting system
* IN: user_list List of slurmdb_user_rec_t *
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*/
extern int slurmdb_users_add(void *db_conn, List user_list);
/*
* get info from the storage
* IN: slurmdb_user_cond_t *
* IN: params void *
* returns List of slurmdb_user_rec_t *
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_users_get(void *db_conn, slurmdb_user_cond_t *user_cond);
/*
* modify existing users in the accounting system
* IN: slurmdb_user_cond_t *user_cond
* IN: slurmdb_user_rec_t *user
* RET: List containing (char *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_users_modify(void *db_conn,
slurmdb_user_cond_t *user_cond,
slurmdb_user_rec_t *user);
/*
* remove users from accounting system
* IN: slurmdb_user_cond_t *user_cond
* RET: List containing (char *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_users_remove(void *db_conn,
slurmdb_user_cond_t *user_cond);
/************** user report functions **************/
/************** wckey functions **************/
/*
* add wckey's to accounting system
* IN: wckey_list List of slurmdb_wckey_rec_t *
* RET: SLURM_SUCCESS on success SLURM_ERROR else
*/
extern int slurmdb_wckeys_add(void *db_conn, List wckey_list);
/*
* get info from the storage
* IN: slurmdb_wckey_cond_t *
* RET: List of slurmdb_wckey_rec_t *
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_wckeys_get(void *db_conn,
slurmdb_wckey_cond_t *wckey_cond);
/*
* modify existing wckey in the accounting system
* IN: slurmdb_wckey_cond_t *wckey_cond
* IN: slurmdb_wckey_rec_t *wckey
* RET: List containing (char *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_wckeys_modify(void *db_conn,
slurmdb_wckey_cond_t *wckey_cond,
slurmdb_wckey_rec_t *wckey);
/*
* remove wckey from accounting system
* IN: slurmdb_wckey_cond_t *assoc_wckey
* RET: List containing (char *'s) else NULL on error
* note List needs to be freed with slurm_list_destroy() when called
*/
extern List slurmdb_wckeys_remove(void *db_conn,
slurmdb_wckey_cond_t *wckey_cond);
#ifdef __cplusplus
}
#endif
#endif /* !_SLURMDB_H */
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/lurenchina/metastack.git
[email protected]:lurenchina/metastack.git
lurenchina
metastack
metastack
master

搜索帮助