Files
MaxScale/server/modules/monitor/galeramon/galeramon.h
Johan Wikman 60228f0f26 MXS-1848 Implement createInstance() and destroyInstance()
CreateInstance() (renamed from initMonitor()) and destroyInstance()
(renamed from finishMonitor()) have now tentatively been
implemented for all monitors.

Next step is to

1) change the prototype of startMonitor() to

       bool (*startMonitor)(MXS_SPECIFIC_MONITOR*,
                            const MXS_MONITOR_PARAMETER*);

   and assume that mon->handle will always contain the
   instance,
2) not delete any data in stopMonitor(),
3) add monitorCreateAll() that calls createInstance() for all
   monitors (and call that in main()), and
4) add monitorDestroyAll() that calls destroyInstance() for
   all monitors (and call that in main()).
2018-05-07 14:07:05 +03:00

101 lines
3.7 KiB
C

#pragma once
#ifndef _GALERAMON_H
#define _GALERAMON_H
/*
* Copyright (c) 2016 MariaDB Corporation Ab
*
* Use of this software is governed by the Business Source License included
* in the LICENSE.TXT file and at www.mariadb.com/bsl11.
*
* Change Date: 2020-01-01
*
* On the date above, in accordance with the Business Source License, use
* of this software will be governed by version 2 or later of the General
* Public License.
*/
/**
* @file galeramon.h - The Galera cluster monitor
*
* @verbatim
* Revision History
*
* Date Who Description
* 07/05/15 Markus Makela Initial Implementation of galeramon.h
* @endverbatim
*/
#include <maxscale/cdefs.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <maxscale/monitor.h>
#include <maxscale/spinlock.h>
#include <maxscale/thread.h>
#include <mysql.h>
#include <mysqld_error.h>
#include <maxscale/log_manager.h>
#include <maxscale/secrets.h>
#include <maxscale/dcb.h>
#include <maxscale/modinfo.h>
#include <maxscale/config.h>
#include <maxscale/hashtable.h>
/**
* Galera Variables and server reference for each
* monitored node that could be part of cluster.
*
* This struct is added to the HASHTABLE *galera_nodes_info
*/
typedef struct galera_node_info
{
int joined; /**< The node claims to be "Synced" */
int local_index; /**< wsrep_local_index Galera variable:
* the node index vlaue in the cluster */
int local_state; /**< wsrep_local_state Galera variable:
* the node state in the cluster */
int cluster_size; /**< wsrep_cluster_size Galera variable:
* the cluster size the node sees */
char *cluster_uuid; /**< wsrep_cluster_uuid Galera variable:
* the cluster UUID the node sees */
const SERVER *node; /**< The reference to nodes' SERVER struct */
} GALERA_NODE_INFO;
/**
* Information of the current detected
* Galera Cluster
*/
typedef struct galera_cluster_info
{
int c_size; /**< How many nodes in the cluster */
char *c_uuid; /**< The Cluster UUID */
} GALERA_CLUSTER_INFO;
/**
* The handle for an instance of a Galera Monitor module
*/
struct GALERA_MONITOR : public MXS_SPECIFIC_MONITOR
{
THREAD thread; /**< Monitor thread */
int shutdown; /**< Flag to shutdown the monitor thread */
int status; /**< Monitor status */
unsigned long id; /**< Monitor ID */
int disableMasterFailback; /**< Monitor flag for Galera Cluster Master failback */
int availableWhenDonor; /**< Monitor flag for Galera Cluster Donor availability */
bool disableMasterRoleSetting; /**< Monitor flag to disable setting master role */
MXS_MONITORED_SERVER *master; /**< Master server for MySQL Master/Slave replication */
char* script; /**< Launchable script */
bool root_node_as_master; /**< Whether we require that the Master should
* have a wsrep_local_index of 0 */
bool use_priority; /**< Use server priorities */
uint64_t events; /**< Enabled monitor events */
bool set_donor_nodes; /**< set the wrep_sst_donor variable with an
* ordered list of nodes */
HASHTABLE *galera_nodes_info; /**< Contains Galera Cluster variables of all nodes */
GALERA_CLUSTER_INFO cluster_info; /**< Contains Galera cluster info */
MXS_MONITOR* monitor; /**< Pointer to generic monitor structure */
bool checked; /**< Whether server access has been checked */
};
#endif