Moved common functions to monitor_common.c
This commit is contained in:
@ -59,17 +59,10 @@ MODULE_INFO info = {
|
|||||||
|
|
||||||
static void *startMonitor(void *,void*);
|
static void *startMonitor(void *,void*);
|
||||||
static void stopMonitor(void *);
|
static void stopMonitor(void *);
|
||||||
static void registerServer(void *, SERVER *);
|
|
||||||
static void unregisterServer(void *, SERVER *);
|
|
||||||
static void defaultUsers(void *, char *, char *);
|
|
||||||
static void diagnostics(DCB *, void *);
|
static void diagnostics(DCB *, void *);
|
||||||
static void setInterval(void *, size_t);
|
|
||||||
static MONITOR_SERVERS *get_candidate_master(MONITOR_SERVERS *);
|
static MONITOR_SERVERS *get_candidate_master(MONITOR_SERVERS *);
|
||||||
static MONITOR_SERVERS *set_cluster_master(MONITOR_SERVERS *, MONITOR_SERVERS *, int);
|
static MONITOR_SERVERS *set_cluster_master(MONITOR_SERVERS *, MONITOR_SERVERS *, int);
|
||||||
static void disableMasterFailback(void *, int);
|
static void disableMasterFailback(void *, int);
|
||||||
static void setNetworkTimeout(void *arg, int type, int value);
|
|
||||||
static bool mon_status_changed(MONITOR_SERVERS* mon_srv);
|
|
||||||
static bool mon_print_fail_status(MONITOR_SERVERS* mon_srv);
|
|
||||||
|
|
||||||
static MONITOR_OBJECT MyObject = {
|
static MONITOR_OBJECT MyObject = {
|
||||||
startMonitor,
|
startMonitor,
|
||||||
@ -142,7 +135,7 @@ CONFIG_PARAMETER* params = (CONFIG_PARAMETER*)opt;
|
|||||||
handle->availableWhenDonor = 0;
|
handle->availableWhenDonor = 0;
|
||||||
handle->disableMasterRoleSetting = 0;
|
handle->disableMasterRoleSetting = 0;
|
||||||
handle->master = NULL;
|
handle->master = NULL;
|
||||||
handle->master_down_script = NULL;
|
handle->script = NULL;
|
||||||
spinlock_init(&handle->lock);
|
spinlock_init(&handle->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,9 +150,9 @@ CONFIG_PARAMETER* params = (CONFIG_PARAMETER*)opt;
|
|||||||
handle->disableMasterRoleSetting = config_truth_value(params->value);
|
handle->disableMasterRoleSetting = config_truth_value(params->value);
|
||||||
else if(!strcmp(params->name,"master_down_script"))
|
else if(!strcmp(params->name,"master_down_script"))
|
||||||
{
|
{
|
||||||
if(handle->master_down_script)
|
if(handle->script)
|
||||||
externcmd_free(handle->master_down_script);
|
free(handle->script);
|
||||||
handle->master_down_script = externcmd_allocate(params->value);
|
handle->script = strdup(params->value);
|
||||||
}
|
}
|
||||||
params = params->next;
|
params = params->next;
|
||||||
}
|
}
|
||||||
@ -438,16 +431,9 @@ int log_no_members = 1;
|
|||||||
|
|
||||||
while (ptr)
|
while (ptr)
|
||||||
{
|
{
|
||||||
monitorDatabase(mon, ptr);
|
ptr->mon_prev_status = ptr->server->status;
|
||||||
|
|
||||||
if(ptr->mon_prev_status & SERVER_MASTER &&
|
monitorDatabase(mon, ptr);
|
||||||
SERVER_IS_DOWN(ptr->server))
|
|
||||||
{
|
|
||||||
if(externcmd_execute(handle->master_down_script) == -1)
|
|
||||||
{
|
|
||||||
skygw_log_write(LOGFILE_ERROR,"Error: Failed to execute master server failure script in galeramon.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* clear bits for non member nodes */
|
/* clear bits for non member nodes */
|
||||||
if ( ! SERVER_IN_MAINT(ptr->server) && (ptr->server->node_id < 0 || ! SERVER_IS_JOINED(ptr->server))) {
|
if ( ! SERVER_IN_MAINT(ptr->server) && (ptr->server->node_id < 0 || ! SERVER_IS_JOINED(ptr->server))) {
|
||||||
@ -665,48 +651,3 @@ availableWhenDonor(void *arg, int disable)
|
|||||||
GALERA_MONITOR *handle = (GALERA_MONITOR *)arg;
|
GALERA_MONITOR *handle = (GALERA_MONITOR *)arg;
|
||||||
memcpy(&handle->availableWhenDonor, &disable, sizeof(int));
|
memcpy(&handle->availableWhenDonor, &disable, sizeof(int));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if current monitored server status has changed
|
|
||||||
*
|
|
||||||
* @param mon_srv The monitored server
|
|
||||||
* @return true if status has changed or false
|
|
||||||
*/
|
|
||||||
static bool mon_status_changed(
|
|
||||||
MONITOR_SERVERS* mon_srv)
|
|
||||||
{
|
|
||||||
bool succp;
|
|
||||||
|
|
||||||
if (mon_srv->mon_prev_status != mon_srv->server->status)
|
|
||||||
{
|
|
||||||
succp = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
succp = false;
|
|
||||||
}
|
|
||||||
return succp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if current monitored server has a loggable failure status
|
|
||||||
*
|
|
||||||
* @param mon_srv The monitored server
|
|
||||||
* @return true if failed status can be logged or false
|
|
||||||
*/
|
|
||||||
static bool mon_print_fail_status(
|
|
||||||
MONITOR_SERVERS* mon_srv)
|
|
||||||
{
|
|
||||||
bool succp;
|
|
||||||
int errcount = mon_srv->mon_err_count;
|
|
||||||
|
|
||||||
if (SERVER_IS_DOWN(mon_srv->server) && errcount == 0)
|
|
||||||
{
|
|
||||||
succp = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
succp = false;
|
|
||||||
}
|
|
||||||
return succp;
|
|
||||||
}
|
|
||||||
|
@ -61,7 +61,7 @@ typedef struct {
|
|||||||
int availableWhenDonor; /**< Monitor flag for Galera Cluster Donor availability */
|
int availableWhenDonor; /**< Monitor flag for Galera Cluster Donor availability */
|
||||||
int disableMasterRoleSetting; /**< Monitor flag to disable setting master role */
|
int disableMasterRoleSetting; /**< Monitor flag to disable setting master role */
|
||||||
MONITOR_SERVERS *master; /**< Master server for MySQL Master/Slave replication */
|
MONITOR_SERVERS *master; /**< Master server for MySQL Master/Slave replication */
|
||||||
EXTERNCMD* master_down_script;
|
char* script;
|
||||||
} GALERA_MONITOR;
|
} GALERA_MONITOR;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -51,11 +51,7 @@ static void *startMonitor(void *,void*);
|
|||||||
static void stopMonitor(void *);
|
static void stopMonitor(void *);
|
||||||
static void diagnostics(DCB *, void *);
|
static void diagnostics(DCB *, void *);
|
||||||
static void detectStaleMaster(void *, int);
|
static void detectStaleMaster(void *, int);
|
||||||
static bool mon_status_changed(MONITOR_SERVERS* mon_srv);
|
|
||||||
static bool mon_print_fail_status(MONITOR_SERVERS* mon_srv);
|
|
||||||
static MONITOR_SERVERS *get_current_master(MONITOR *);
|
static MONITOR_SERVERS *get_current_master(MONITOR *);
|
||||||
static void monitor_set_pending_status(MONITOR_SERVERS *, int);
|
|
||||||
static void monitor_clear_pending_status(MONITOR_SERVERS *, int);
|
|
||||||
|
|
||||||
static MONITOR_OBJECT MyObject = {
|
static MONITOR_OBJECT MyObject = {
|
||||||
startMonitor,
|
startMonitor,
|
||||||
@ -138,7 +134,7 @@ CONFIG_PARAMETER* params = (CONFIG_PARAMETER*)opt;
|
|||||||
params = params->next;
|
params = params->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
handle->tid = (THREAD)thread_start(monitorMain, handle);
|
handle->tid = (THREAD)thread_start(monitorMain, mon);
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,7 +209,6 @@ monitorDatabase(MONITOR* mon, MONITOR_SERVERS *database)
|
|||||||
MYSQL_MONITOR *handle = mon->handle;
|
MYSQL_MONITOR *handle = mon->handle;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
MYSQL_RES *result;
|
MYSQL_RES *result;
|
||||||
int num_fields;
|
|
||||||
int isslave = 0;
|
int isslave = 0;
|
||||||
int ismaster = 0;
|
int ismaster = 0;
|
||||||
char *uname = mon->user;
|
char *uname = mon->user;
|
||||||
|
@ -113,3 +113,52 @@ void mon_append_node_names(MONITOR_SERVERS* start,char* str, int len)
|
|||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if current monitored server status has changed
|
||||||
|
*
|
||||||
|
* @param mon_srv The monitored server
|
||||||
|
* @return true if status has changed or false
|
||||||
|
*/
|
||||||
|
bool mon_status_changed(
|
||||||
|
MONITOR_SERVERS* mon_srv)
|
||||||
|
{
|
||||||
|
bool succp;
|
||||||
|
|
||||||
|
/** This is the first time the server was set with a status*/
|
||||||
|
if (mon_srv->mon_prev_status == -1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (mon_srv->mon_prev_status != mon_srv->server->status)
|
||||||
|
{
|
||||||
|
succp = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
succp = false;
|
||||||
|
}
|
||||||
|
return succp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if current monitored server has a loggable failure status
|
||||||
|
*
|
||||||
|
* @param mon_srv The monitored server
|
||||||
|
* @return true if failed status can be logged or false
|
||||||
|
*/
|
||||||
|
bool mon_print_fail_status(
|
||||||
|
MONITOR_SERVERS* mon_srv)
|
||||||
|
{
|
||||||
|
bool succp;
|
||||||
|
int errcount = mon_srv->mon_err_count;
|
||||||
|
|
||||||
|
if (SERVER_IS_DOWN(mon_srv->server) && errcount == 0)
|
||||||
|
{
|
||||||
|
succp = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
succp = false;
|
||||||
|
}
|
||||||
|
return succp;
|
||||||
|
}
|
||||||
|
@ -35,4 +35,6 @@ void mon_append_node_names(MONITOR_SERVERS* start,char* str, int len);
|
|||||||
char* mon_get_event_type(MONITOR_SERVERS* node);
|
char* mon_get_event_type(MONITOR_SERVERS* node);
|
||||||
void monitor_clear_pending_status(MONITOR_SERVERS *ptr, int bit);
|
void monitor_clear_pending_status(MONITOR_SERVERS *ptr, int bit);
|
||||||
void monitor_set_pending_status(MONITOR_SERVERS *ptr, int bit);
|
void monitor_set_pending_status(MONITOR_SERVERS *ptr, int bit);
|
||||||
|
bool mon_status_changed(MONITOR_SERVERS* mon_srv);
|
||||||
|
bool mon_print_fail_status(MONITOR_SERVERS* mon_srv);
|
||||||
#endif
|
#endif
|
||||||
|
@ -77,8 +77,6 @@ static void *startMonitor(void *,void*);
|
|||||||
static void stopMonitor(void *);
|
static void stopMonitor(void *);
|
||||||
static void diagnostics(DCB *, void *);
|
static void diagnostics(DCB *, void *);
|
||||||
static void defaultId(void *, unsigned long);
|
static void defaultId(void *, unsigned long);
|
||||||
static bool mon_status_changed(MONITOR_SERVERS* mon_srv);
|
|
||||||
static bool mon_print_fail_status(MONITOR_SERVERS* mon_srv);
|
|
||||||
static MONITOR_SERVERS *getServerByNodeId(MONITOR_SERVERS *, long);
|
static MONITOR_SERVERS *getServerByNodeId(MONITOR_SERVERS *, long);
|
||||||
static MONITOR_SERVERS *getSlaveOfNodeId(MONITOR_SERVERS *, long);
|
static MONITOR_SERVERS *getSlaveOfNodeId(MONITOR_SERVERS *, long);
|
||||||
static MONITOR_SERVERS *get_replication_tree(MONITOR *, int);
|
static MONITOR_SERVERS *get_replication_tree(MONITOR *, int);
|
||||||
@ -807,55 +805,6 @@ MYSQL_MONITOR *handle = (MYSQL_MONITOR *)arg;
|
|||||||
memcpy(&handle->detectStaleMaster, &enable, sizeof(int));
|
memcpy(&handle->detectStaleMaster, &enable, sizeof(int));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if current monitored server status has changed
|
|
||||||
*
|
|
||||||
* @param mon_srv The monitored server
|
|
||||||
* @return true if status has changed or false
|
|
||||||
*/
|
|
||||||
static bool mon_status_changed(
|
|
||||||
MONITOR_SERVERS* mon_srv)
|
|
||||||
{
|
|
||||||
bool succp;
|
|
||||||
|
|
||||||
/** This is the first time the server was set with a status*/
|
|
||||||
if (mon_srv->mon_prev_status == -1)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (mon_srv->mon_prev_status != mon_srv->server->status)
|
|
||||||
{
|
|
||||||
succp = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
succp = false;
|
|
||||||
}
|
|
||||||
return succp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if current monitored server has a loggable failure status
|
|
||||||
*
|
|
||||||
* @param mon_srv The monitored server
|
|
||||||
* @return true if failed status can be logged or false
|
|
||||||
*/
|
|
||||||
static bool mon_print_fail_status(
|
|
||||||
MONITOR_SERVERS* mon_srv)
|
|
||||||
{
|
|
||||||
bool succp;
|
|
||||||
int errcount = mon_srv->mon_err_count;
|
|
||||||
|
|
||||||
if (SERVER_IS_DOWN(mon_srv->server) && errcount == 0)
|
|
||||||
{
|
|
||||||
succp = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
succp = false;
|
|
||||||
}
|
|
||||||
return succp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch a MySQL node by node_id
|
* Fetch a MySQL node by node_id
|
||||||
*
|
*
|
||||||
|
@ -122,7 +122,7 @@ CONFIG_PARAMETER* params = (CONFIG_PARAMETER*)opt;
|
|||||||
spinlock_init(&handle->lock);
|
spinlock_init(&handle->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
handle->tid = (THREAD)thread_start(monitorMain, handle);
|
handle->tid = (THREAD)thread_start(monitorMain, mon);
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -356,10 +356,10 @@ size_t nrounds = 0;
|
|||||||
|
|
||||||
while (ptr)
|
while (ptr)
|
||||||
{
|
{
|
||||||
unsigned int prev_status = ptr->server->status;
|
ptr->mon_prev_status = ptr->server->status;
|
||||||
monitorDatabase(ptr, mon->user, mon->password,mon);
|
monitorDatabase(ptr, mon->user, mon->password,mon);
|
||||||
|
|
||||||
if (ptr->server->status != prev_status ||
|
if (ptr->server->status != ptr->mon_prev_status ||
|
||||||
SERVER_IS_DOWN(ptr->server))
|
SERVER_IS_DOWN(ptr->server))
|
||||||
{
|
{
|
||||||
LOGIF(LD, (skygw_log_write_flush(
|
LOGIF(LD, (skygw_log_write_flush(
|
||||||
|
Reference in New Issue
Block a user