# Slurm Accounting Storage Plugin API

## Overview

This document describes Slurm Accounting Storage plugins and the API that defines them. It is intended as a resource to programmers wishing to write their own Slurm Job Accounting Storage plugins. This is version 1 of the API.

Slurm Accounting Storage plugins must conform to the Slurm Plugin API with the following specifications:

const char plugin_name[]="full text name"

A free-formatted ASCII text string that identifies the plugin.

const char plugin_type[]="major/minor"

The major type must be "accounting_storage." The minor type can be any suitable name for the type of accounting package. We currently use

- filetxt — Information written to a text file.
- mysql — Store information in a mysql database (using the InnoDB storage engine).
- slurmdbd — Send information to the Slurm Database Daemon (SlurmDBD). Extra configuration is needed and described here.
- none — Information is not stored anywhere.

const uint32_t plugin_version
If specified, identifies the version of Slurm used to build this plugin and any attempt to load the plugin from a different version of Slurm will result in an error. If not specified, then the plugin may be loaded by Slurm commands and daemons from any version, however this may result in difficult to diagnose failures due to changes in the arguments to plugin functions or changes in other Slurm functions used by the plugin.

The programmer is urged to study src/plugins/accounting_storage/mysql for a sample implementation of a Slurm Accounting Storage plugin.

The Accounting Storage plugin was written to be an interface to storage data collected by the Job Accounting Gather plugin. When adding a new database you may want to add common functions in a common file in the src/database dir. Refer to src/database/mysql_common.c|.h for an example so other plugins can also use that database type to write out information.

## API Functions

The Job Accounting Storage API uses hooks in the slurmctld.

All of the following functions are required. Functions which are not implemented must be stubbed.

int init (void)

Description:
Called when the plugin is loaded, before any other functions are called. Put global initialization here.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

void fini (void)

Description:
Called when the plugin is removed. Clear any allocated storage here.

Returns: None.

Note: These init and fini functions are not the same as those described in the dlopen (3) system library. The C run-time system co-opts those symbols for its own initialization. The system _init() is called before the Slurm init(), and the Slurm fini() is called before the system's _fini().

### Functions called by the accounting_storage plugin

void *acct_storage_p_get_connection(bool make_agent, int conn_num, uint16_t *persist_conn_flags, bool rollback, char *location)

Description:
acct_storage_p_get_connection() is called to get a connection to the storage medium. acct_storage_p_close_connection() should be used to free the pointer returned by this function.

Arguments:
make_agent (input) to make an agent thread or not. This is primarily used in the slurmdbd plugin.
conn_num (input) connection number to the plugin. In many cases you should plan on multiple simultaneous connections to the plugin. This number is useful since the debug messages can print this out to determine which connection the message is from.
persist_conn_flags (output) Flags passed back from the server if talking to the dbd (optional).
rollback (input) Allow rollback to happen or not (in use with databases that support rollback).

Returns:
void * which is an opaque structure used inside the plugin to connect to the storage type on success, or
NULL on failure.

int acct_storage_p_close_connection(void **db_conn)

Description:
acct_storage_p_close_connection() is called at the end of the program that has called acct_storage_p_get_connection(). This function closes the connection to the storage type.

Arguments:
db_conn (input/output) connection to the storage type; all memory will be freed inside this function and set to NULL.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int acct_storage_p_commit(void *db_conn, bool commit)

Description:
acct_storage_p_commit() is called at a point where you would either want changes to storage to be committed or rolled back. This function should also send appropriate update messages to the various slurmctlds.

Arguments:
db_conn (input) connection to the storage type.
commit (input) true for commit, false to rollback if connection was set up to rollback.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int acct_storage_p_add_users(void *db_conn, uint32_t uid, List user_list)

Description:
Called to add users to the storage type.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
user_list (input) list of acct_user_rec_t *'s containing information about the users being added.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int acct_storage_p_add_coord(void *db_conn, uint32_t uid, List acct_list, acct_user_cond_t *user_cond)

Description:
Called to link specified users to the specified accounts as coordinators.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
acct_list (input) list of acct_account_rec_t *'s containing information about the accounts to add the coordinators to.
user_cond (input) contain a list of users to add to be coordinators of the acct_list.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int acct_storage_p_add_accts(void *db_conn, uint32_t uid, List acct_list)

Description:
Called to add accounts to the storage type.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
acct_list (input) list of acct_account_rec_t *'s containing information about the accounts to add.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int acct_storage_p_add_clusters(void *db_conn, uint32_t uid, List cluster_list)

Description:
Called to add clusters to the storage type.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
cluster_list (input) list of acct_cluster_rec_t *'s containing information about the clusters to add.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int acct_storage_p_add_assocs(void *db_conn, uint32_t uid, List assoc_list)

Description:
Called to add associations to the storage type.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
assoc_list (input) list of acct_assoc_rec_t *'s containing information about the associations to add.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int acct_storage_p_add_qos(void *db_conn, uint32_t uid, List qos_list)

Description:
Called to add QOS's to the storage type.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
qos_list (input) list of acct_qos_rec_t *'s containing information about the qos to add.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int acct_storage_p_add_wckeys(void *db_conn, uint32_t uid, List wckey_list)

Description:
Called to add wckeys to the storage type.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
wckey_list (input) list of acct_wckey_rec_t *'s containing information about the wckeys to add.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int acct_storage_p_add_reservation(void *db_conn, acct_reservation_rec_t *resv)

Description:
Called to add reservations to the storage type.

Arguments:
db_conn (input) connection to the storage type.
resv (input) Reservation to be added.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

List acct_storage_p_modify_users(void *db_conn, uint32_t uid, acct_user_cond_t *user_cond, acct_user_rec_t *user)

Description:
Used to modify existing users in the storage type. The condition could include very vague information about the user, so this function should be robust in the ability to give everything the user is asking for. This is the reason a list of modified users is returned so the caller knows what has been changed, sometimes by mistake.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
user_cond (input) conditional about which users need to change. User names or ids should not need to be stated.
user (input) what the changes should be on the users identified by the conditional.

Returns:
List containing names of users modified on success, or
NULL on failure.

List acct_storage_p_modify_accounts(void *db_conn, uint32_t uid, acct_account_cond_t *acct_cond, acct_account_rec_t *acct)

Description:
Used to modify existing accounts in the storage type. The condition could include very vague information about the account, so this function should be robust in the ability to give everything the account is asking for. This is the reason a list of modified accounts is returned so the caller knows what has been changed, sometimes by mistake.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
acct_cond (input) conditional about which accounts need to change. Account names should not need to be stated.
acct (input) what the changes should be on the accounts identified by the conditional.

Returns:
List containing names of users modified on success, or
NULL on failure.

List acct_storage_p_modify_clusters(void *db_conn, uint32_t uid, acct_cluster_cond_t *cluster_cond, acct_cluster_rec_t *cluster)

Description:
Used to modify existing clusters in the storage type. The condition could include very vague information about the cluster, so this function should be robust in the ability to give everything the cluster is asking for. This is the reason a list of modified clusters is returned so the caller knows what has been changed, sometimes by mistake.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
cluster_cond (input) conditional about which clusters need to change. Cluster names should not need to be stated.
cluster (input) what the changes should be on the clusters identified by the conditional.

Returns:
List containing names of clusters modified on success, or
NULL on failure.

List acct_storage_p_modify_assocs(void *db_conn, uint32_t uid, acct_assoc_cond_t *assoc_cond, acct_assoc_rec_t *assoc)

Description:
Used to modify existing associations in the storage type. The condition could include very vague information about the association, so this function should be robust in the ability to give everything the association is asking for. This is the reason a list of modified associations is returned so the caller knows what has been changed, sometimes by mistake.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
assoc_cond (input) conditional about which associations need to change. Association ids should not need to be stated.
assoc (input) what the changes should be on the associations identified by the conditional.

Returns:
List containing names of associations modified on success, or
NULL on failure.

List acct_storage_p_modify_job(void *db_conn, uint32_t uid, acct_job_modify_cond_t *job_cond, acct_job_rec_t *job)

Description:
Used to modify two fields (the derived exit code and the comment string) of an existing job in the storage type. Can only modify one job at a time.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
job_cond (input) conditional about which job need to change.
job (input) what the changes should be on the job identified by the conditional.

Returns:
List containing ID of job modified on success, or
NULL on failure.

List acct_storage_p_modify_qos(void *db_conn, uint32_t uid, acct_qos_cond_t *qos_cond, acct_qos_rec_t *qos)

Description:
Used to modify existing qos in the storage type. The condition could include very vague information about the qos, so this function should be robust in the ability to give everything the qos is asking for. This is the reason a list of modified qos is returned so the caller knows what has been changed, sometimes by mistake.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
qos_cond (input) conditional about which qos need to change. Qos names should not need to be stated.
qos (input) what the changes should be on the qos identified by the conditional.

Returns:
List containing names of qos modified on success, or
NULL on failure.

List acct_storage_p_modify_wckeys(void *db_conn, uint32_t uid, acct_wckey_cond_t *wckey_cond, acct_wckey_rec_t *wckey)

Description:
Used to modify existing wckeys in the storage type. The condition could include very vague information about the wckeys, so this function should be robust in the ability to give everything the wckey is asking for. This is the reason a list of modified wckey is returned so the caller knows what has been changed, sometimes by mistake.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
wckey_cond (input) conditional about which wckeys need to change. Wckey names should not need to be stated.
wckey (input) what the changes should be on the wckey identified by the conditional.

Returns:
List containing names of wckeys modified on success, or
NULL on failure.

int acct_storage_p_modify_reservation(void *db_conn, acct_reservation_rec_t *resv)

Description:
Called to modify reservations in the storage type.

Arguments:
db_conn (input) connection to the storage type.
resv (input) Reservation to be modified (id) must be set in the structure.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

List acct_storage_p_remove_users(void *db_conn, uint32_t uid, acct_user_cond_t *user_cond)

Description:
Used to remove users from the storage type. This will remove all associations. Must check to make sure all running jobs are finished before this is allowed to execute.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
user_cond (input) conditional about which users to be removed. User names or ids should not need to be stated.

Returns:
List containing names of users removed on success, or
NULL on failure.

List acct_storage_p_remove_coord(void *db_conn, uint32_t uid, List acct_list, acct_user_cond_t *user_cond)

Description:
Used to remove coordinators from the storage type.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
acct_list (input) list of accounts associated with the users.
user_cond (input) conditional about which users to be removed as coordinators. User names or ids should be stated.

Returns:
List containing names of users removed as coordinators on success, or
NULL on failure.

List acct_storage_p_remove_accounts(void *db_conn, uint32_t uid, acct_account_cond_t *acct_cond)

Description:
Used to remove accounts from the storage type. This will remove all associations from these accounts. You need to make sure no jobs are running with any association that is to be removed. If any of these accounts are default accounts for users that must also change before an account can be removed.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
acct_cond (input) conditional about which accounts to be removed. Account names should not need to be stated.

Returns:
List containing names of accounts removed on success, or
NULL on failure.

List acct_storage_p_remove_clusters(void *db_conn, uint32_t uid, acct_cluster_cond_t *cluster_cond)

Description:
Used to remove clusters from the storage type. This will remove all associations from these clusters. You need to make sure no jobs are running with any association that is to be removed.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
cluster_cond (input) conditional about which clusters to be removed. Cluster names should not need to be stated.

Returns:
List containing names of clusters removed on success, or
NULL on failure.

List acct_storage_p_remove_assocs(void *db_conn, uint32_t uid, acct_assoc_cond_t *assoc_cond)

Description:
Used to remove associations from the storage type. You need to make sure no jobs are running with any association that is to be removed.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
assoc_cond (input) conditional about which associations to be removed. Association ids should not need to be stated.

Returns:
List containing names of associations removed on success, or
NULL on failure.

List acct_storage_p_remove_qos(void *db_conn, uint32_t uid, acct_qos_cond_t *qos_cond)

Description:
Used to remove qos from the storage type.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
qos_cond (input) conditional about which qos to be removed. Qos names should not need to be stated.

Returns:
List containing names of qos removed on success, or
NULL on failure.

List acct_storage_p_remove_wckeys(void *db_conn, uint32_t uid, acct_wckey_cond_t *wckey_cond)

Description:
Used to remove wckeys from the storage type.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
wckey_cond (input) conditional about which wckeys to be removed. Wckey names should not need to be stated.

Returns:
List containing names of wckeys removed on success, or
NULL on failure.

int acct_storage_p_remove_reservation(void *db_conn, acct_reservation_rec_t *resv)

Description:
Called to remove reservations in the storage type.

Arguments:
db_conn (input) connection to the storage type.
resv (input) Reservation to be removed (id) must be set in the structure.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

List acct_storage_p_get_users(void *db_conn, uint32_t uid, acct_user_cond_t *user_cond)

Description:
Get a list of acct_user_rec_t *'s based on the conditional sent.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
user_cond (input) conditional about which users are to be returned. User names or ids should not need to be stated.

Returns:
List containing acct_user_rec_t *'s on success, or
NULL on failure.

List acct_storage_p_get_accts(void *db_conn, uint32_t uid, acct_account_cond_t *acct_cond)

Description:
Get a list of acct_account_rec_t *'s based on the conditional sent.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
acct_cond (input) conditional about which accounts are to be returned. Account names should not need to be stated.

Returns:
List containing acct_account_rec_t *'s on success, or
NULL on failure.

List acct_storage_p_get_clusters(void *db_conn, uint32_t uid, acct_cluster_cond_t *cluster_cond)

Description:
Get a list of acct_cluster_rec_t *'s based on the conditional sent.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
cluster_cond (input) conditional about which clusters are to be returned. Cluster names should not need to be stated.

Returns:
List containing acct_cluster_rec_t *'s on success, or
NULL on failure.

List acct_storage_p_get_assocs(void *db_conn, uint32_t uid, acct_assoc_cond_t *assoc_cond)

Description:
Get a list of acct_assoc_rec_t *'s based on the conditional sent.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
assoc_cond (input) conditional about which associations are to be returned. Association names should not need to be stated.

Returns:
List containing acct_assoc_rec_t *'s on success, or
NULL on failure.

List acct_storage_p_get_events(void *db_conn, uint32_t uid, acct_event_cond_t *event_cond)

Description:
Get a list of acct_event_rec_t *'s based on the conditional sent.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
event_cond (input) conditional about which events are to be returned.

Returns:
List containing acct_event_rec_t *'s on success, or
NULL on failure.

List acct_storage_p_get_qos(void *db_conn, uint32_t uid, acct_qos_cond_t *qos_cond)

Description:
Get a list of acct_qos_rec_t *'s based on the conditional sent.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
qos_cond (input) conditional about which qos are to be returned. Qos names should not need to be stated.

Returns:
List containing acct_qos_rec_t *'s on success, or
NULL on failure.

List acct_storage_p_get_wckeys(void *db_conn, uint32_t uid, acct_wckey_cond_t *wckey_cond)

Description:
Get a list of acct_wckey_rec_t *'s based on the conditional sent.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
wckey_cond (input) conditional about which wckeys are to be returned. Wckey names should not need to be stated.

Returns:
List containing acct_wckey_rec_t *'s on success, or
NULL on failure.

List acct_storage_p_get_txn(void *db_conn, uint32_t uid, acct_txn_cond_t *txn_cond)

Description:
Get a list of acct_txn_rec_t *'s (transactions) based on the conditional sent.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
txn_cond (input) conditional about which transactions are to be returned. Transaction ids should not need to be stated.

Returns:
List containing acct_txn_rec_t *'s on success, or
NULL on failure.

int acct_storage_p_get_usage(void *db_conn, uint32_t uid, void *in, int type, time_t start, time_t end)

Description:
Get usage for a specific association or wckey.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
in (input/out) can be anything that gathers usage like acct_assoc_rec_t * or acct_wckey_rec_t *.
type (input) really slurmdbd_msg_type_t should let the plugin know what the structure is that was sent in some how.
start (input) start time of the usage.
end (input) end time of the usage.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int acct_storage_p_roll_usage(void *db_conn, time_t sent_start, time_t sent_end, uint16_t archive_data, rollup_stats_t *rollup_stats)

Description:
roll up association, cluster, and wckey usage in the storage.

Arguments:
db_conn (input) connection to the storage type.
sent_start (input) start time of the rollup.
sent_end (input) end time of the rollup.
archive_data (input) archive the results if not zero.
rollup_stats (input/output) performance statistics.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int clusteracct_storage_p_node_down(void *db_conn, char *cluster, struct node_record *node_ptr, time_t event_time, char *reason)

Description:
Mark nodes down in the storage type.

Arguments:
db_conn (input) connection to the storage type.
cluster (input) name of cluster node is on.
node_ptr (input) pointer to the node structure marked down.
event_time (input) time event happened.
reason (input) if different from what is set in the node_ptr, the reason the node is down.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int clusteracct_storage_p_node_up(void *db_conn, char *cluster, struct node_record *node_ptr, time_t event_time)

Description:
Mark nodes up in the storage type.

Arguments:
db_conn (input) connection to the storage type.
cluster (input) name of cluster node is on.
node_ptr (input) pointer to the node structure marked up.
event_time (input) time event happened.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int clusteracct_storage_p_cluster_procs(void *db_conn, char *cluster, char *cluster_nodes, uint32_t procs, time_t event_time)

Description:
Update storage type with the current number of processors on a given cluster.

Arguments:
db_conn (input) connection to the storage type.
cluster (input) name of cluster.
cluster_nodes (input) ranged list of nodes on system.
procs (input) number of processors on system.
event_time (input) time event happened.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int clusteracct_storage_p_get_usage(void *db_conn, uint32_t uid, void *cluster_rec, int type, time_t start, time_t end)

Description:
Get usage for a specific cluster.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
cluster_rec (input/out) acct_cluster_rec_t * already set with the cluster name. Usage will be filled in.
type (input) really slurmdbd_msg_type_t should let the plugin know what the structure is that was sent in some how for this it is just DBD_GET_CLUSTER_USAGE.
start (input) start time of the usage.
end (input) end time of the usage.

Arguments:
db_conn (input) connection to the storage type.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int clusteracct_storage_p_register_ctld(void *db_conn, char *cluster, uint16_t port)

Description:
Used when a controller is turned on to tell the storage type where the slurmctld for a given cluster is located at.

Arguments:
db_conn (input) connection to the storage type.
cluster (input) name of cluster.
port (input) port on host cluster is running on the host is grabbed from the connection.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int clusteracct_storage_p_fini_ctld(void *db_conn, char *ip, uint16_t port, char *cluster_nodes)

Description:
Used when a controller is turned off to tell the storage type the slurmctld has gone away.

Arguments:
db_conn (input) connection to the storage type.
ip (input) ip of connected slurmctld.
port (input) port on host cluster is running on the host is grabbed from the connection.
cluster_nodes (input) name of all nodes currently on the cluster.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int jobacct_storage_p_job_start(void *db_conn, struct job_record *job_ptr)

Description:
Note that a job is about to begin execution or has just changed size. The job's state will include the JOB_RESIZING flag if and only if it has just changed size. Otherwise the job is beginning execution for the first time. Note the existance of resize_time in the job record if one wishes to record information about a job at each size (i.e. a history of the job as its size changes through time).

Arguments:
db_conn (input) connection to the storage type.
job_ptr (input) information about the job in slurmctld.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int jobacct_storage_p_job_complete(void *db_conn, struct job_record *job_ptr)

Description:
Note that a job is about to terminate or change size. The job's state will include the JOB_RESIZING flag if and only if it is about to change size. Otherwise the job is terminating. Note the existance of resize_time in the job record if one wishes to record information about a job at each size (i.e. a history of the job as its size changes through time).

Arguments:
db_conn (input) connection to the storage type.
job_ptr (input) information about the job in slurmctld.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int jobacct_storage_p_step_start(void *db_conn, struct step_record *step_ptr)

Description:
jobacct_storage_p_step_start() is called in the jobacct plugin at the allocation of a new step in the slurmctld, this inserts info about the beginning of a step.

Arguments:
db_conn (input) connection to the storage type.
step_ptr (input) information about the step in slurmctld.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int jobacct_storage_p_step_complete(void *db_conn, struct step_record *step_ptr)

Description:
jobacct_storage_p_step_complete() is called in the jobacct plugin at the end of a step in the slurmctld, this updates the ending information about a step.

Arguments:
db_conn (input) connection to the storage type.
step_ptr (input) information about the step in slurmctld.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int jobacct_storage_p_job_suspend(void *db_conn, struct job_record *job_ptr)

Description:
jobacct_storage_p_suspend() is called in the jobacct plugin when a job is suspended or resumed in the slurmctld, this updates the database about the suspended time of the job.

Arguments:
db_conn (input) connection to the storage type.
job_ptr (input) information about the job in slurmctld.

Returns:
none

List jobacct_storage_p_get_jobs_cond(void *db_conn, uint32_t uid, acct_job_cond_t *job_cond)

Description:
jobacct_storage_p_get_jobs_cond() is called to get a list of jobs from the database given the conditional.

Arguments:
db_conn (input) connection to the storage type.
uid (input) uid of user calling the function.
job_cond (input) conditional about which jobs to get. Job ids should not need to be stated.

Returns:
List of job_rec_t's on success, or
NULL on failure.

int jobacct_storage_p_archive(void *db_conn, acct_archive_cond_t *arch_cond)

Description:
used to archive old data.

Arguments:
db_conn (input) connection to the storage type.
arch_cond (input) conditional about what to archive.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int jobacct_storage_p_archive_load(void *db_conn, acct_archive_rect *arch_rec)

Description:
used to load old archive data.

Arguments:
db_conn (input) connection to the storage type.
arch_rec (input) information about what to load.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int acct_storage_p_update_shares_used(void *db_conn, List acct_list)

Description:
Used to update shares used in the storage type.

Arguments:
db_conn (input) connection to the storage type.
acct_list (input) List of shares_used_object_t.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int acct_storage_p_flush_jobs_on_cluster(void *db_conn, char *cluster, time_t event_time)

Description:
used to mark all jobs in the storage type as finished.

Arguments:
db_conn (input) connection to the storage type.
cluster (input) name of cluster to apply end to.
event_time (input) when the flush happened.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

int acct_storage_p_reconfig(void *db_conn)

Description:
Reconfigure the plugin.

Arguments:
db_conn (input) connection to the storage type.

Returns:
SLURM_SUCCESS on success, or
SLURM_ERROR on failure.

## Parameters

These parameters can be used in the slurm.conf to set up connections to the database all have defaults based on the plugin type used.

AccountingStorageType
  Specifies which plugin should be used.
AccountingStorageLoc
  Let the plugin the name of the logfile/database name to use.
AccountingStorageHost
  Let the plugin know the host where the database is.
AccountingStoragePort
  Let the plugin know the port to connect to.
AccountingStorageUser
  Let the plugin know the name of the user to connect to the database with.
AccountingStoragePass
  Let the plugin know the password of the user connecting to the database.
AccountingStorageEnforce
  Specifies if we should enforce certain things be in existence before allowing job submissions and such valid options are "associations, limits, qos, and wckeys". You can use any combination of those listed.

Last modified 22 July 2016