|  | /****************************************************************************\ | 
|  | *  slurmdbd_defs.h - definitions used for Slurm DBD RPCs | 
|  | ***************************************************************************** | 
|  | *  Copyright (C) 2008-2010 Lawrence Livermore National Security. | 
|  | *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). | 
|  | *  Written by Morris Jette <jette1@llnl.gov> | 
|  | *  CODE-OCEC-09-009. All rights reserved. | 
|  | * | 
|  | *  This file is part of Slurm, a resource management program. | 
|  | *  For details, see <https://slurm.schedmd.com/>. | 
|  | *  Please also read the included file: DISCLAIMER. | 
|  | * | 
|  | *  Slurm is free software; you can redistribute it and/or modify it under | 
|  | *  the terms of the GNU General Public License as published by the Free | 
|  | *  Software Foundation; either version 2 of the License, or (at your option) | 
|  | *  any later version. | 
|  | * | 
|  | *  In addition, as a special exception, the copyright holders give permission | 
|  | *  to link the code of portions of this program with the OpenSSL library under | 
|  | *  certain conditions as described in each individual source file, and | 
|  | *  distribute linked combinations including the two. You must obey the GNU | 
|  | *  General Public License in all respects for all of the code used other than | 
|  | *  OpenSSL. If you modify file(s) with this exception, you may extend this | 
|  | *  exception to your version of the file(s), but you are not obligated to do | 
|  | *  so. If you do not wish to do so, delete this exception statement from your | 
|  | *  version.  If you delete this exception statement from all source files in | 
|  | *  the program, then also delete it here. | 
|  | * | 
|  | *  Slurm is distributed in the hope that it will be useful, but WITHOUT ANY | 
|  | *  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | 
|  | *  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more | 
|  | *  details. | 
|  | * | 
|  | *  You should have received a copy of the GNU General Public License along | 
|  | *  with Slurm; if not, write to the Free Software Foundation, Inc., | 
|  | *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA. | 
|  | \*****************************************************************************/ | 
|  |  | 
|  | #ifndef _SLURMDBD_DEFS_H | 
|  | #define _SLURMDBD_DEFS_H | 
|  |  | 
|  | #include <inttypes.h> | 
|  |  | 
|  | #include "slurm/slurm.h" | 
|  |  | 
|  | #include "src/common/list.h" | 
|  | #include "src/interfaces/accounting_storage.h" | 
|  |  | 
|  | #define RC_AS_CLUSTER_ID SLURM_BIT(31) | 
|  |  | 
|  | /* Slurm DBD message types */ | 
|  | /* ANY TIME YOU ADD TO THIS LIST UPDATE THE CONVERSION FUNCTIONS! */ | 
|  | typedef enum { | 
|  | SLURM_DBD_MESSAGES_START = 1400, /* So that we don't overlap with any | 
|  | * slurm_msg_type_t numbers. */ | 
|  | DBD_FINI,       	/* Connection finalization		*/ | 
|  | DBD_ADD_ACCOUNTS,       /* Add new account to the mix           */ | 
|  | DBD_ADD_ACCOUNT_COORDS, /* Add new coordinatior to an account   */ | 
|  | DBD_ADD_ASSOCS,         /* Add new association to the mix       */ | 
|  | DBD_ADD_CLUSTERS,       /* Add new cluster to the mix           */ | 
|  | DBD_ADD_USERS,          /* Add new user to the mix              */ | 
|  | DBD_CLUSTER_TRES,	/* Record total tres on cluster	*/ | 
|  | DBD_FLUSH_JOBS, 	/* End jobs that are still running | 
|  | * when a controller is restarted.	*/ | 
|  | DBD_GET_ACCOUNTS,	/* Get account information		*/ | 
|  | DBD_GET_ASSOCS,         /* #1410, Get association information   */ | 
|  | DBD_GET_ASSOC_USAGE,  	/* Get assoc usage information   	*/ | 
|  | DBD_GET_CLUSTERS,	/* Get account information		*/ | 
|  | DBD_GET_CLUSTER_USAGE, 	/* Get cluster usage information	*/ | 
|  | DBD_RECONFIG,   	/* Reread the slurmdbd.conf     	*/ | 
|  | DBD_GET_USERS,  	/* Get account information		*/ | 
|  | DBD_GOT_ACCOUNTS,	/* Response to DBD_GET_ACCOUNTS		*/ | 
|  | DBD_GOT_ASSOCS, 	/* Response to DBD_GET_ASSOCS   	*/ | 
|  | DBD_GOT_ASSOC_USAGE,  	/* Response to DBD_GET_ASSOC_USAGE    	*/ | 
|  | DBD_GOT_CLUSTERS,	/* Response to DBD_GET_CLUSTERS		*/ | 
|  | DBD_GOT_CLUSTER_USAGE, 	/* #1420, Response to DBD_GET_CLUSTER_USAGE */ | 
|  | DBD_GOT_JOBS,		/* Response to DBD_GET_JOBS		*/ | 
|  | DBD_GOT_LIST,           /* Response to DBD_MODIFY/REMOVE MOVE_* */ | 
|  | DBD_GOT_USERS,  	/* Response to DBD_GET_USERS		*/ | 
|  | DBD_JOB_COMPLETE,	/* Record job completion 		*/ | 
|  | DBD_JOB_START,		/* Record job starting			*/ | 
|  | DBD_ID_RC,	        /* return db_index from job | 
|  | * insertion, or any other id from | 
|  | * other commands.              	*/ | 
|  | DBD_JOB_SUSPEND,	/* Record job suspension		*/ | 
|  | DBD_MODIFY_ACCOUNTS,    /* Modify existing account              */ | 
|  | DBD_MODIFY_ASSOCS,      /* Modify existing association          */ | 
|  | DBD_MODIFY_CLUSTERS,    /* #1430, Modify existing cluster       */ | 
|  | DBD_MODIFY_USERS,       /* Modify existing user                 */ | 
|  | DBD_NODE_STATE,		/* Record node state transition		*/ | 
|  | SLURM_PERSIST_RC,	/* To mirror the DBD_RC this is replacing */ | 
|  | DBD_REGISTER_CTLD,	/* Register a slurmctld's comm port	*/ | 
|  | DBD_REMOVE_ACCOUNTS,    /* Remove existing account              */ | 
|  | DBD_REMOVE_ACCOUNT_COORDS,/* Remove existing coordinator from | 
|  | * an account */ | 
|  | DBD_REMOVE_ASSOCS,      /* Remove existing association          */ | 
|  | DBD_REMOVE_CLUSTERS,    /* Remove existing cluster              */ | 
|  | DBD_REMOVE_USERS,       /* Remove existing user                 */ | 
|  | DBD_ROLL_USAGE,         /* #1440 Roll up usage                  */ | 
|  | DBD_STEP_COMPLETE,	/* Record step completion		*/ | 
|  | DBD_STEP_START,		/* Record step starting			*/ | 
|  | DBD_DEFUNCT_RPC_1443,	/* Free for reuse			*/ | 
|  | DBD_GET_JOBS_COND, 	/* Get job information with a condition */ | 
|  | DBD_GET_TXN,		/* Get transaction information		*/ | 
|  | DBD_GOT_TXN,		/* Got transaction information		*/ | 
|  | DBD_ADD_QOS,		/* Add QOS information   	        */ | 
|  | DBD_GET_QOS,		/* Get QOS information   	        */ | 
|  | DBD_GOT_QOS,		/* Got QOS information   	        */ | 
|  | DBD_REMOVE_QOS,		/* #1450, Remove QOS information        */ | 
|  | DBD_MODIFY_QOS,         /* Modify existing QOS                  */ | 
|  | DBD_ADD_WCKEYS,		/* Add WCKEY information   	        */ | 
|  | DBD_GET_WCKEYS,		/* Get WCKEY information   	        */ | 
|  | DBD_GOT_WCKEYS,		/* Got WCKEY information   	        */ | 
|  | DBD_REMOVE_WCKEYS,	/* Remove WCKEY information   	        */ | 
|  | DBD_MODIFY_WCKEYS,      /* Modify existing WCKEY                */ | 
|  | DBD_GET_WCKEY_USAGE,  	/* Get wckey usage information  	*/ | 
|  | DBD_GOT_WCKEY_USAGE,  	/* Get wckey usage information  	*/ | 
|  | DBD_ARCHIVE_DUMP,    	/* issue a request to dump jobs to | 
|  | * archive */ | 
|  | DBD_ARCHIVE_LOAD,    	/* #1460, load an archive file          */ | 
|  | DBD_ADD_RESV,    	/* add a reservation                    */ | 
|  | DBD_REMOVE_RESV,    	/* remove a reservation                 */ | 
|  | DBD_MODIFY_RESV,    	/* modify a reservation                 */ | 
|  | DBD_GET_RESVS,    	/* Get reservation information  	*/ | 
|  | DBD_GOT_RESVS,		/* Response to DBD_GET_RESV		*/ | 
|  | DBD_GET_CONFIG,  	/* Get configuration information	*/ | 
|  | DBD_GOT_CONFIG,		/* Response to DBD_GET_CONFIG		*/ | 
|  | DBD_GET_PROBS,  	/* Get problems existing in accounting	*/ | 
|  | DBD_GOT_PROBS,		/* Response to DBD_GET_PROBS		*/ | 
|  | DBD_GET_EVENTS, 	/* #1470, Get event information		*/ | 
|  | DBD_GOT_EVENTS, 	/* Response to DBD_GET_EVENTS		*/ | 
|  | DBD_SEND_MULT_JOB_START,/* Send multiple job starts		*/ | 
|  | DBD_GOT_MULT_JOB_START,	/* Get response to DBD_SEND_MULT_JOB_START */ | 
|  | DBD_SEND_MULT_MSG,      /* Send multiple message		*/ | 
|  | DBD_GOT_MULT_MSG,	/* Get response to DBD_SEND_MULT_MSG    */ | 
|  | DBD_MODIFY_JOB,		/* Modify existing Job(s)               */ | 
|  | DBD_ADD_RES,    	/* Add new system resource to the mix   */ | 
|  | DBD_GET_RES,		/* Get resource information		*/ | 
|  | DBD_GOT_RES,		/* Got resource information		*/ | 
|  | DBD_REMOVE_RES,     	/* #1480, Remove existing resource      */ | 
|  | DBD_MODIFY_RES,     	/* Modify existing resource      	*/ | 
|  | DBD_ADD_CLUS_RES,    	/* Add cluster using a resource    	*/ | 
|  | DBD_REMOVE_CLUS_RES,   	/* Remove existing cluster resource    	*/ | 
|  | DBD_MODIFY_CLUS_RES,   	/* Modify existing cluster resource   	*/ | 
|  | DBD_ADD_TRES,           /* Add tres to the database           */ | 
|  | DBD_GET_TRES,           /* Get tres from the database         */ | 
|  | DBD_GOT_TRES,           /* Got tres from the database         */ | 
|  | DBD_FIX_RUNAWAY_JOB,    /* Fix any runaway jobs */ | 
|  | DBD_GET_STATS,		/* Get daemon statistics */ | 
|  | DBD_GOT_STATS,		/* #1490 ,Got daemon statistics data */ | 
|  | DBD_CLEAR_STATS,	/* Clear daemon statistics */ | 
|  | DBD_SHUTDOWN,		/* Shutdown daemon */ | 
|  | DBD_ADD_FEDERATIONS,    /* Add new federation to the mix        */ | 
|  | DBD_GET_FEDERATIONS,	/* Get federation information		*/ | 
|  | DBD_GOT_FEDERATIONS,	/* Response to DBD_GET_FEDERATIONS 	*/ | 
|  | DBD_MODIFY_FEDERATIONS, /* Modify existing federation 		*/ | 
|  | DBD_REMOVE_FEDERATIONS, /* Removing existing federation 	*/ | 
|  | DBD_JOB_HEAVY,         /* Send job script/env  		*/ | 
|  | DBD_GOT_JOB_ENV,	/* Loading env hash table*/ | 
|  | DBD_GOT_JOB_SCRIPT,	/* #1450, Loading bash script hash table */ | 
|  | DBD_ADD_ACCOUNTS_COND,  /* Add new account to the mix with acct_rec and | 
|  | * add_assoc_cond */ | 
|  | DBD_ADD_USERS_COND,     /* Add new user to the mix with user_rec and | 
|  | * add_assoc_cond */ | 
|  | DBD_GET_INSTANCES,	/* Get instance information */ | 
|  | DBD_GOT_INSTANCES,	/* Response to DBD_GET_INSTANCES */ | 
|  | DBD_GET_QOS_USAGE,  	/* Get qos usage information */ | 
|  | DBD_GOT_QOS_USAGE,  	/* Response to DBD_GET_QOS_USAGE */ | 
|  | DBD_GET_ASSOC_NG_USAGE, /* Get non-grouped assoc usage | 
|  | * (this is used for sreport user topuser) */ | 
|  | SLURM_DBD_MESSAGES_END = 2000, /* So that we don't overlap with any | 
|  | * slurm_msg_type_t numbers. */ | 
|  | SLURM_PERSIST_INIT = 6500, /* So we don't use the | 
|  | * REQUEST_PERSIST_INIT also used here. | 
|  | */ | 
|  | SLURM_PERSIST_INIT_TLS = 6501, | 
|  | } slurmdbd_msg_type_t; | 
|  |  | 
|  | /*****************************************************************************\ | 
|  | * Slurm DBD protocol data structures | 
|  | \*****************************************************************************/ | 
|  |  | 
|  | typedef struct { | 
|  | list_t *acct_list; /* list of account names (char *'s) */ | 
|  | slurmdb_user_cond_t *cond; | 
|  | } dbd_acct_coord_msg_t; | 
|  |  | 
|  | typedef struct dbd_cluster_tres_msg { | 
|  | char *cluster_nodes;	/* nodes in cluster */ | 
|  | time_t event_time;	/* time of transition */ | 
|  | char *tres_str;	        /* Simple comma separated list of TRES */ | 
|  | } dbd_cluster_tres_msg_t; | 
|  |  | 
|  | typedef struct { | 
|  | void *rec; /* this could be anything based on the type types | 
|  | * are defined in slurm_accounting_storage.h | 
|  | * *_rec_t */ | 
|  | } dbd_rec_msg_t; | 
|  |  | 
|  | typedef struct { | 
|  | void *cond; /* this could be anything based on the type types | 
|  | * are defined in slurm_accounting_storage.h | 
|  | * *_cond_t */ | 
|  | } dbd_cond_msg_t; | 
|  |  | 
|  | typedef struct { | 
|  | uint16_t archive_data; | 
|  | time_t end; | 
|  | time_t start; | 
|  | } dbd_roll_usage_msg_t; | 
|  |  | 
|  | typedef struct { | 
|  | time_t end; | 
|  | void *rec; | 
|  | time_t start; | 
|  | } dbd_usage_msg_t; | 
|  |  | 
|  | typedef struct dbd_get_jobs_msg { | 
|  | char *cluster_name;	/* name of cluster to query */ | 
|  | uint16_t completion;	/* get job completion records instead | 
|  | * of accounting record */ | 
|  | uint32_t gid;		/* group id */ | 
|  | time_t last_update;	/* time of latest info */ | 
|  | list_t *selected_steps;	/* list_t *of slurm_selected_step_t *'s */ | 
|  | list_t *selected_parts;	/* list_t *of char *'s */ | 
|  | char *user;		/* user name */ | 
|  | } dbd_get_jobs_msg_t; | 
|  |  | 
|  | typedef struct dbd_init_msg { | 
|  | char *cluster_name;     /* cluster this message is coming from */ | 
|  | uint16_t version;	/* protocol version */ | 
|  | uint32_t uid;		/* UID originating connection, | 
|  | * filled by authtentication plugin*/ | 
|  | } dbd_init_msg_t; | 
|  |  | 
|  | typedef struct dbd_fini_msg { | 
|  | uint16_t close_conn;  /* to close connection 1, 0 will keep | 
|  | connection open */ | 
|  | uint16_t commit;      /* to rollback(0) or commit(1) changes */ | 
|  | } dbd_fini_msg_t; | 
|  |  | 
|  | typedef struct dbd_job_comp_msg { | 
|  | char *	 admin_comment;	/* job admin comment field */ | 
|  | uint32_t assoc_id;	/* accounting association id needed to | 
|  | * find job record in db */ | 
|  | char *	 comment;	/* job comment field */ | 
|  | uint64_t db_index;	/* index into the db for this job */ | 
|  | uint32_t derived_ec;	/* derived job exit code or signal */ | 
|  | time_t   end_time;	/* job termintation time */ | 
|  | char *failed_node;	/* Name of node that failed which caused | 
|  | * this job to be killed. | 
|  | * NULL in all other situations */ | 
|  | uint32_t exit_code;	/* job exit code or signal */ | 
|  | char *extra;		/* job extra field */ | 
|  | uint32_t job_id;	/* job ID */ | 
|  | uint32_t job_state;	/* job state */ | 
|  | char *   nodes;		/* hosts allocated to the job */ | 
|  | uint32_t req_uid;	/* requester user ID */ | 
|  | time_t   start_time;	/* job start time */ | 
|  | time_t   submit_time;	/* job submit time needed to find job | 
|  | * record in db */ | 
|  | char *	 system_comment;/* job system comment field */ | 
|  | char    *tres_alloc_str;/* Simple comma separated list of TRES */ | 
|  | } dbd_job_comp_msg_t; | 
|  |  | 
|  | typedef struct dbd_job_start_msg { | 
|  | char *   account;       /* Account name for those not running | 
|  | * with associations */ | 
|  | uint32_t alloc_nodes;   /* how many nodes used in job */ | 
|  | uint32_t array_job_id;	/* job_id of a job array or 0 if N/A */ | 
|  | uint32_t array_max_tasks;/* max number of tasks able to run at once */ | 
|  | uint32_t array_task_id;	/* task_id of a job array of NO_VAL | 
|  | * if N/A */ | 
|  | char *   array_task_str;/* hex string of unstarted tasks */ | 
|  | uint32_t array_task_pending;/* number of tasks still pending */ | 
|  | uint32_t assoc_id;	/* accounting association id */ | 
|  | char *   constraints;   /* features/constraints requested by job */ | 
|  | char *container;        /* OCI Container bundle path */ | 
|  | uint32_t db_flags;      /* flags about job */ | 
|  | uint64_t db_index;	/* index into the db for this job */ | 
|  | time_t   eligible_time;	/* time job becomes eligible to run */ | 
|  | char *env_hash;         /* hash value of env */ | 
|  | uint32_t gid;	        /* group ID */ | 
|  | uint32_t het_job_id;	/* ID of hetjob leader or 0 */ | 
|  | uint32_t het_job_offset; /* Hetjob component ID, zero-origin */ | 
|  | uint32_t job_id;	/* job ID */ | 
|  | uint32_t job_state;	/* job state */ | 
|  | char *licenses; 	/* job licenses */ | 
|  | char *   mcs_label;	/* job mcs_label */ | 
|  | char *   name;		/* job name */ | 
|  | char *   nodes;		/* hosts allocated to the job */ | 
|  | char *   node_inx;      /* ranged bitmap string of hosts | 
|  | * allocated to the job */ | 
|  | char *   partition;	/* partition job is running on */ | 
|  | uint32_t priority;	/* job priority */ | 
|  | uint32_t qos_id;        /* qos job is running with */ | 
|  | char *qos_req;          /* qos(s) requested for the job */ | 
|  | uint32_t req_cpus;	/* count of req processors */ | 
|  | uint64_t req_mem;       /* requested minimum memory */ | 
|  | uint16_t restart_cnt;   /* How many times the job has been restarted */ | 
|  | uint32_t resv_id;	/* reservation id */ | 
|  | char *resv_req;		/* original requested reservations */ | 
|  | char *script_hash;      /* hash value of script */ | 
|  | uint16_t segment_size;	/* requested segment size */ | 
|  | time_t   start_time;	/* job start time */ | 
|  | uint32_t state_reason_prev; /* Last reason of blocking before job | 
|  | * started */ | 
|  | char *std_err;          /* The stderr file path of the job */ | 
|  | char *std_in;           /* The stdin file path of the job */ | 
|  | char *std_out;          /* The stdout file path of the job */ | 
|  | char *submit_line;      /* The command issued with all it's options in a | 
|  | * string */ | 
|  | time_t   submit_time;	/* job submit time */ | 
|  | uint32_t timelimit;	/* job timelimit */ | 
|  | uint32_t uid;	        /* user ID if associations are being used */ | 
|  | char*    gres_used;     /* String depicting the GRES actually used by | 
|  | * type for the entire job on all nodes. */ | 
|  | char    *tres_alloc_str;/* Simple comma separated list of TRES */ | 
|  | char    *tres_req_str;  /* Simple comma separated list of TRES */ | 
|  | char *   wckey;		/* wckey name */ | 
|  | char    *work_dir;      /* work dir of job */ | 
|  | } dbd_job_start_msg_t; | 
|  |  | 
|  | /* returns a uint32_t along with a return code */ | 
|  | typedef struct dbd_id_rc_msg { | 
|  | uint32_t job_id; | 
|  | uint64_t db_index; | 
|  | uint64_t flags; | 
|  | uint32_t return_code; | 
|  | } dbd_id_rc_msg_t; | 
|  |  | 
|  | typedef struct { | 
|  | char *env;              /* job environment in text form */ | 
|  | char *env_hash;         /* hash value of env */ | 
|  | char *script;           /* job_script in text form */ | 
|  | char *script_hash;      /* hash value of script */ | 
|  | buf_t *script_buf;	/* job script as mmap buf */ | 
|  | } dbd_job_heavy_msg_t; | 
|  |  | 
|  | typedef struct dbd_job_suspend_msg { | 
|  | uint32_t assoc_id;	/* accounting association id needed | 
|  | * to find job record in db */ | 
|  | uint64_t db_index;	/* index into the db for this job */ | 
|  | uint32_t job_id;	/* job ID needed to find job record | 
|  | * in db */ | 
|  | uint32_t job_state;	/* job state */ | 
|  | time_t   submit_time;	/* job submit time needed to find job record | 
|  | * in db */ | 
|  | time_t   suspend_time;	/* job suspend or resume time */ | 
|  | } dbd_job_suspend_msg_t; | 
|  |  | 
|  | typedef struct { | 
|  | list_t *my_list;	/* this list could be of any type as long as it | 
|  | * is handled correctly on both ends */ | 
|  | uint32_t return_code;   /* If there was an error and a list of | 
|  | * them this is the type of error it | 
|  | * was */ | 
|  | } dbd_list_msg_t; | 
|  |  | 
|  | typedef struct { | 
|  | void *cond; | 
|  | void *rec; | 
|  | } dbd_modify_msg_t; | 
|  |  | 
|  | #define DBD_NODE_STATE_DOWN  1 | 
|  | #define DBD_NODE_STATE_UP    2 | 
|  | #define DBD_NODE_STATE_UPDATE 3 | 
|  |  | 
|  | typedef struct dbd_node_state_msg { | 
|  | time_t event_time;	/* time of transition */ | 
|  | char *extra;		/* arbitrary string */ | 
|  | char *hostlist;		/* name of hosts */ | 
|  | char *instance_id;	/* cloud instance id */ | 
|  | char *instance_type;	/* cloud instance type */ | 
|  | uint16_t new_state;	/* new state of host, see DBD_NODE_STATE_* */ | 
|  | char *reason;		/* explanation for the node's state */ | 
|  | uint32_t reason_uid;   	/* User that set the reason, ignore if | 
|  | * no reason is set. */ | 
|  | uint32_t state;         /* current state of node.  Used to get | 
|  | flags on the state (i.e. maintenance) */ | 
|  | char *tres_str;	        /* Simple comma separated list of TRES */ | 
|  | } dbd_node_state_msg_t; | 
|  |  | 
|  | typedef struct dbd_register_ctld_msg { | 
|  | uint16_t dimensions;    /* dimensions of system */ | 
|  | uint32_t flags;         /* flags for cluster */ | 
|  | uint16_t port;		/* slurmctld's comm port */ | 
|  | uint32_t cluster_id; /* cluster id of cluster making request */ | 
|  | } dbd_register_ctld_msg_t; | 
|  |  | 
|  | typedef struct dbd_step_comp_msg { | 
|  | uint32_t assoc_id;	/* accounting association id */ | 
|  | uint64_t db_index;	/* index into the db for this job */ | 
|  | time_t   end_time;	/* job termintation time */ | 
|  | uint32_t exit_code;	/* job exit code or signal */ | 
|  | jobacctinfo_t *jobacct; /* status info */ | 
|  | time_t   job_submit_time;/* job submit time needed to find job record | 
|  | * in db */ | 
|  | char    *job_tres_alloc_str;/* Simple comma separated list of TRES for | 
|  | * the job (primarily for the energy of the | 
|  | * completing job.  This is only filled in | 
|  | * on the last step in the job. */ | 
|  | uint32_t req_uid;	/* requester user ID */ | 
|  | time_t   start_time;	/* step start time */ | 
|  | uint16_t state;         /* current state of node.  Used to get | 
|  | flags on the state (i.e. maintenance) */ | 
|  | slurm_step_id_t step_id; | 
|  | uint32_t total_tasks;	/* count of tasks for step */ | 
|  | } dbd_step_comp_msg_t; | 
|  |  | 
|  | typedef struct dbd_step_start_msg { | 
|  | uint32_t assoc_id;	/* accounting association id */ | 
|  | uint64_t db_index;	/* index into the db for this job */ | 
|  | char *container;	/* OCI Container Bundle path */ | 
|  | char *   name;		/* step name */ | 
|  | char *   nodes;		/* hosts allocated to the step */ | 
|  | char *   node_inx;	/* bitmap index of hosts allocated to | 
|  | * the step */ | 
|  | uint32_t node_cnt;      /* how many nodes used in step */ | 
|  | time_t   start_time;	/* step start time */ | 
|  | time_t   job_submit_time;/* job submit time needed to find job record | 
|  | * in db */ | 
|  | uint32_t req_cpufreq_min; /* requested minimum CPU frequency  */ | 
|  | uint32_t req_cpufreq_max; /* requested maximum CPU frequency  */ | 
|  | uint32_t req_cpufreq_gov; /* requested CPU frequency governor */ | 
|  | slurm_step_id_t step_id; | 
|  | char *cwd;              /* Current work dir of the step */ | 
|  | char *std_err;          /* The stderr file path of the step */ | 
|  | char *std_in;           /* The stdin file path of the step */ | 
|  | char *std_out;          /* The stdout file path of the step */ | 
|  | char *submit_line;      /* The command issued with all it's options in a | 
|  | * string */ | 
|  | uint32_t task_dist;     /* layout method of step */ | 
|  | uint32_t time_limit; /* time limit of step */ | 
|  | uint32_t total_tasks;	/* count of tasks for step */ | 
|  | char *tres_alloc_str;   /* Simple comma separated list of TRES */ | 
|  | } dbd_step_start_msg_t; | 
|  |  | 
|  | typedef struct { | 
|  | void *data; | 
|  | uint16_t msg_type; | 
|  | } dbd_relay_msg_t; | 
|  |  | 
|  | /*****************************************************************************\ | 
|  | * Slurm DBD message processing functions | 
|  | \*****************************************************************************/ | 
|  |  | 
|  | extern slurmdbd_msg_type_t str_2_slurmdbd_msg_type(char *msg_type); | 
|  | extern char *slurmdbd_msg_type_2_str(slurmdbd_msg_type_t msg_type, | 
|  | int get_enum); | 
|  |  | 
|  | /*****************************************************************************\ | 
|  | * Free various SlurmDBD message structures | 
|  | \*****************************************************************************/ | 
|  | extern void slurmdbd_free_buffer(void *x); | 
|  |  | 
|  | extern void slurmdbd_free_acct_coord_msg(dbd_acct_coord_msg_t *msg); | 
|  | extern void slurmdbd_free_cluster_tres_msg(dbd_cluster_tres_msg_t *msg); | 
|  | extern void slurmdbd_free_msg(persist_msg_t *msg); | 
|  | extern void slurmdbd_free_rec_msg(dbd_rec_msg_t *msg, slurmdbd_msg_type_t type); | 
|  | extern void slurmdbd_free_cond_msg(dbd_cond_msg_t *msg, | 
|  | slurmdbd_msg_type_t type); | 
|  | extern void slurmdbd_free_fini_msg(dbd_fini_msg_t *msg); | 
|  | extern void slurmdbd_free_job_complete_msg(dbd_job_comp_msg_t *msg); | 
|  | extern void slurmdbd_free_job_start_msg(void *in); | 
|  | extern void slurmdbd_free_job_heavy_msg(void *in); | 
|  | extern void slurmdbd_free_id_rc_msg(void *in); | 
|  | extern void slurmdbd_free_job_suspend_msg(dbd_job_suspend_msg_t *msg); | 
|  | extern void slurmdbd_free_list_msg(dbd_list_msg_t *msg); | 
|  | extern void slurmdbd_free_modify_msg(dbd_modify_msg_t *msg, | 
|  | slurmdbd_msg_type_t type); | 
|  | extern void slurmdbd_free_node_state_msg(dbd_node_state_msg_t *msg); | 
|  | extern void slurmdbd_free_register_ctld_msg(dbd_register_ctld_msg_t *msg); | 
|  | extern void slurmdbd_free_roll_usage_msg(dbd_roll_usage_msg_t *msg); | 
|  | extern void slurmdbd_free_step_complete_msg(dbd_step_comp_msg_t *msg); | 
|  | extern void slurmdbd_free_step_start_msg(dbd_step_start_msg_t *msg); | 
|  | extern void slurmdbd_free_usage_msg(dbd_usage_msg_t *msg, | 
|  | slurmdbd_msg_type_t type); | 
|  |  | 
|  | #endif	/* !_SLURMDBD_DEFS_H */ |