dhodovsk / source-git / pacemaker

Forked from source-git/pacemaker 3 years ago
Clone

Blame daemons/controld/controld_lrm.h

rpm-build 3ee90c
/*
rpm-build 3ee90c
 * Copyright 2004-2019 the Pacemaker project contributors
rpm-build 3ee90c
 *
rpm-build 3ee90c
 * The version control history for this file may have further details.
rpm-build 3ee90c
 *
rpm-build 3ee90c
 * This source code is licensed under the GNU Lesser General Public License
rpm-build 3ee90c
 * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
rpm-build 3ee90c
 */
rpm-build 3ee90c
rpm-build 3ee90c
#include <controld_messages.h>
rpm-build 3ee90c
#include <controld_metadata.h>
rpm-build 3ee90c
rpm-build 3ee90c
extern gboolean verify_stopped(enum crmd_fsa_state cur_state, int log_level);
rpm-build 3ee90c
void lrm_clear_last_failure(const char *rsc_id, const char *node_name,
rpm-build 3ee90c
                            const char *operation, guint interval_ms);
rpm-build 3ee90c
void lrm_op_callback(lrmd_event_data_t * op);
rpm-build 3ee90c
lrmd_t *crmd_local_lrmd_conn(void);
rpm-build 3ee90c
rpm-build 3ee90c
typedef struct resource_history_s {
rpm-build 3ee90c
    char *id;
rpm-build 3ee90c
    uint32_t last_callid;
rpm-build 3ee90c
    lrmd_rsc_info_t rsc;
rpm-build 3ee90c
    lrmd_event_data_t *last;
rpm-build 3ee90c
    lrmd_event_data_t *failed;
rpm-build 3ee90c
    GList *recurring_op_list;
rpm-build 3ee90c
rpm-build 3ee90c
    /* Resources must be stopped using the same
rpm-build 3ee90c
     * parameters they were started with.  This hashtable
rpm-build 3ee90c
     * holds the parameters that should be used for the next stop
rpm-build 3ee90c
     * cmd on this resource. */
rpm-build 3ee90c
    GHashTable *stop_params;
rpm-build 3ee90c
} rsc_history_t;
rpm-build 3ee90c
rpm-build 3ee90c
void history_free(gpointer data);
rpm-build 3ee90c
91c557
enum active_op_e {
91c557
    active_op_remove    = (1 << 0),
91c557
    active_op_cancelled = (1 << 1),
91c557
};
91c557
2e9006
// In-flight action (recurring or pending)
2e9006
typedef struct active_op_s {
rpm-build 3ee90c
    guint interval_ms;
rpm-build 3ee90c
    int call_id;
91c557
    uint32_t flags; // bitmask of active_op_e
rpm-build 3ee90c
    time_t start_time;
rpm-build 3ee90c
    char *rsc_id;
rpm-build 3ee90c
    char *op_type;
rpm-build 3ee90c
    char *op_key;
rpm-build 3ee90c
    char *user_data;
rpm-build 3ee90c
    GHashTable *params;
2e9006
} active_op_t;
rpm-build 3ee90c
rpm-build 3ee90c
typedef struct lrm_state_s {
rpm-build 3ee90c
    const char *node_name;
rpm-build 3ee90c
    void *conn;                 // Reserved for controld_execd_state.c usage
rpm-build 3ee90c
    void *remote_ra_data;       // Reserved for controld_remote_ra.c usage
rpm-build 3ee90c
rpm-build 3ee90c
    GHashTable *resource_history;
rpm-build 3ee90c
    GHashTable *pending_ops;
rpm-build 3ee90c
    GHashTable *deletion_ops;
rpm-build 3ee90c
    GHashTable *rsc_info_cache;
rpm-build 3ee90c
    GHashTable *metadata_cache; // key = class[:provider]:agent, value = ra_metadata_s
rpm-build 3ee90c
rpm-build 3ee90c
    int num_lrm_register_fails;
rpm-build 3ee90c
} lrm_state_t;
rpm-build 3ee90c
rpm-build 3ee90c
struct pending_deletion_op_s {
rpm-build 3ee90c
    char *rsc;
rpm-build 3ee90c
    ha_msg_input_t *input;
rpm-build 3ee90c
};
rpm-build 3ee90c
rpm-build 3ee90c
/*!
rpm-build 3ee90c
 * \brief Check whether this the local IPC connection to the executor
rpm-build 3ee90c
 */
rpm-build 3ee90c
gboolean
rpm-build 3ee90c
lrm_state_is_local(lrm_state_t *lrm_state);
rpm-build 3ee90c
rpm-build 3ee90c
/*!
rpm-build 3ee90c
 * \brief Clear all state information from a single state entry.
rpm-build 3ee90c
 * \note It sometimes useful to save metadata cache when it won't go stale.
rpm-build 3ee90c
 * \note This does not close the executor connection
rpm-build 3ee90c
 */
rpm-build 3ee90c
void lrm_state_reset_tables(lrm_state_t * lrm_state, gboolean reset_metadata);
rpm-build 3ee90c
GList *lrm_state_get_list(void);
rpm-build 3ee90c
rpm-build 3ee90c
/*!
rpm-build 3ee90c
 * \brief Initiate internal state tables
rpm-build 3ee90c
 */
rpm-build 3ee90c
gboolean lrm_state_init_local(void);
rpm-build 3ee90c
rpm-build 3ee90c
/*!
rpm-build 3ee90c
 * \brief Destroy all state entries and internal state tables
rpm-build 3ee90c
 */
rpm-build 3ee90c
void lrm_state_destroy_all(void);
rpm-build 3ee90c
rpm-build 3ee90c
/*!
rpm-build 3ee90c
 * \brief Create executor connection entry
rpm-build 3ee90c
 */
rpm-build 3ee90c
lrm_state_t *lrm_state_create(const char *node_name);
rpm-build 3ee90c
rpm-build 3ee90c
/*!
rpm-build 3ee90c
 * \brief Destroy executor connection by node name
rpm-build 3ee90c
 */
rpm-build 3ee90c
void lrm_state_destroy(const char *node_name);
rpm-build 3ee90c
rpm-build 3ee90c
/*!
rpm-build 3ee90c
 * \brief Find lrm_state data by node name
rpm-build 3ee90c
 */
rpm-build 3ee90c
lrm_state_t *lrm_state_find(const char *node_name);
rpm-build 3ee90c
rpm-build 3ee90c
/*!
rpm-build 3ee90c
 * \brief Either find or create a new entry
rpm-build 3ee90c
 */
rpm-build 3ee90c
lrm_state_t *lrm_state_find_or_create(const char *node_name);
rpm-build 3ee90c
rpm-build 3ee90c
/*!
rpm-build 3ee90c
 * The functions below are wrappers for the executor API the the controller
rpm-build 3ee90c
 * uses. These wrapper functions allow us to treat the controller's remote
rpm-build 3ee90c
 * executor connection resources the same as regular resources. Internally,
rpm-build 3ee90c
 * regular resources go to the executor, and remote connection resources are
rpm-build 3ee90c
 * handled locally in the controller.
rpm-build 3ee90c
 */
rpm-build 3ee90c
void lrm_state_disconnect_only(lrm_state_t * lrm_state);
rpm-build 3ee90c
void lrm_state_disconnect(lrm_state_t * lrm_state);
rpm-build 3ee90c
int lrm_state_ipc_connect(lrm_state_t * lrm_state);
rpm-build 3ee90c
int lrm_state_remote_connect_async(lrm_state_t * lrm_state, const char *server, int port,
rpm-build 3ee90c
                                   int timeout);
rpm-build 3ee90c
int lrm_state_is_connected(lrm_state_t * lrm_state);
rpm-build 3ee90c
int lrm_state_poke_connection(lrm_state_t * lrm_state);
rpm-build 3ee90c
rpm-build 3ee90c
int lrm_state_get_metadata(lrm_state_t * lrm_state,
rpm-build 3ee90c
                           const char *class,
rpm-build 3ee90c
                           const char *provider,
rpm-build 3ee90c
                           const char *agent, char **output, enum lrmd_call_options options);
rpm-build 3ee90c
int lrm_state_cancel(lrm_state_t *lrm_state, const char *rsc_id,
rpm-build 3ee90c
                     const char *action, guint interval_ms);
rpm-build 3ee90c
int lrm_state_exec(lrm_state_t *lrm_state, const char *rsc_id,
rpm-build 3ee90c
                   const char *action, const char *userdata, guint interval_ms,
rpm-build 3ee90c
                   int timeout, /* ms */
rpm-build 3ee90c
                   int start_delay,     /* ms */
rpm-build 3ee90c
                   lrmd_key_value_t * params);
rpm-build 3ee90c
lrmd_rsc_info_t *lrm_state_get_rsc_info(lrm_state_t * lrm_state,
rpm-build 3ee90c
                                        const char *rsc_id, enum lrmd_call_options options);
rpm-build 3ee90c
int lrm_state_register_rsc(lrm_state_t * lrm_state,
rpm-build 3ee90c
                           const char *rsc_id,
rpm-build 3ee90c
                           const char *class,
rpm-build 3ee90c
                           const char *provider, const char *agent, enum lrmd_call_options options);
rpm-build 3ee90c
int lrm_state_unregister_rsc(lrm_state_t * lrm_state,
rpm-build 3ee90c
                             const char *rsc_id, enum lrmd_call_options options);
rpm-build 3ee90c
rpm-build 3ee90c
// Functions used to manage remote executor connection resources
rpm-build 3ee90c
void remote_lrm_op_callback(lrmd_event_data_t * op);
rpm-build 3ee90c
gboolean is_remote_lrmd_ra(const char *agent, const char *provider, const char *id);
rpm-build 3ee90c
lrmd_rsc_info_t *remote_ra_get_rsc_info(lrm_state_t * lrm_state, const char *rsc_id);
rpm-build 3ee90c
int remote_ra_cancel(lrm_state_t *lrm_state, const char *rsc_id,
rpm-build 3ee90c
                     const char *action, guint interval_ms);
rpm-build 3ee90c
int remote_ra_exec(lrm_state_t *lrm_state, const char *rsc_id,
rpm-build 3ee90c
                   const char *action, const char *userdata, guint interval_ms,
rpm-build 3ee90c
                   int timeout, /* ms */
rpm-build 3ee90c
                   int start_delay,     /* ms */
rpm-build 3ee90c
                   lrmd_key_value_t * params);
rpm-build 3ee90c
void remote_ra_cleanup(lrm_state_t * lrm_state);
rpm-build 3ee90c
void remote_ra_fail(const char *node_name);
rpm-build 3ee90c
void remote_ra_process_pseudo(xmlNode *xml);
rpm-build 3ee90c
gboolean remote_ra_is_in_maintenance(lrm_state_t * lrm_state);
rpm-build 3ee90c
void remote_ra_process_maintenance_nodes(xmlNode *xml);
rpm-build 3ee90c
gboolean remote_ra_controlling_guest(lrm_state_t * lrm_state);
rpm-build 3ee90c
rpm-build 3ee90c
void process_lrm_event(lrm_state_t *lrm_state, lrmd_event_data_t *op,
2e9006
                       active_op_t *pending, xmlNode *action_xml);