diff --git a/server/modules/monitor/galeramon.c b/server/modules/monitor/galeramon.c index e04fcef8d..ea45e8ff1 100644 --- a/server/modules/monitor/galeramon.c +++ b/server/modules/monitor/galeramon.c @@ -59,17 +59,10 @@ MODULE_INFO info = { static void *startMonitor(void *,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 setInterval(void *, size_t); static MONITOR_SERVERS *get_candidate_master(MONITOR_SERVERS *); static MONITOR_SERVERS *set_cluster_master(MONITOR_SERVERS *, MONITOR_SERVERS *, 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 = { startMonitor, @@ -142,7 +135,7 @@ CONFIG_PARAMETER* params = (CONFIG_PARAMETER*)opt; handle->availableWhenDonor = 0; handle->disableMasterRoleSetting = 0; handle->master = NULL; - handle->master_down_script = NULL; + handle->script = NULL; spinlock_init(&handle->lock); } @@ -157,9 +150,9 @@ CONFIG_PARAMETER* params = (CONFIG_PARAMETER*)opt; handle->disableMasterRoleSetting = config_truth_value(params->value); else if(!strcmp(params->name,"master_down_script")) { - if(handle->master_down_script) - externcmd_free(handle->master_down_script); - handle->master_down_script = externcmd_allocate(params->value); + if(handle->script) + free(handle->script); + handle->script = strdup(params->value); } params = params->next; } @@ -438,16 +431,9 @@ int log_no_members = 1; while (ptr) { - monitorDatabase(mon, ptr); + ptr->mon_prev_status = ptr->server->status; - if(ptr->mon_prev_status & SERVER_MASTER && - 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."); - } - } + monitorDatabase(mon, ptr); /* clear bits for non member nodes */ 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; 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; -} diff --git a/server/modules/monitor/galeramon.h b/server/modules/monitor/galeramon.h index 8a9b95fc9..3a9c41e7f 100644 --- a/server/modules/monitor/galeramon.h +++ b/server/modules/monitor/galeramon.h @@ -61,7 +61,7 @@ typedef struct { int availableWhenDonor; /**< Monitor flag for Galera Cluster Donor availability */ int disableMasterRoleSetting; /**< Monitor flag to disable setting master role */ MONITOR_SERVERS *master; /**< Master server for MySQL Master/Slave replication */ - EXTERNCMD* master_down_script; + char* script; } GALERA_MONITOR; #endif diff --git a/server/modules/monitor/mm_mon.c b/server/modules/monitor/mm_mon.c index acb5b20b1..46adc68b5 100644 --- a/server/modules/monitor/mm_mon.c +++ b/server/modules/monitor/mm_mon.c @@ -51,11 +51,7 @@ static void *startMonitor(void *,void*); static void stopMonitor(void *); static void diagnostics(DCB *, void *); 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 void monitor_set_pending_status(MONITOR_SERVERS *, int); -static void monitor_clear_pending_status(MONITOR_SERVERS *, int); static MONITOR_OBJECT MyObject = { startMonitor, @@ -138,7 +134,7 @@ CONFIG_PARAMETER* params = (CONFIG_PARAMETER*)opt; params = params->next; } - handle->tid = (THREAD)thread_start(monitorMain, handle); + handle->tid = (THREAD)thread_start(monitorMain, mon); return handle; } @@ -213,7 +209,6 @@ monitorDatabase(MONITOR* mon, MONITOR_SERVERS *database) MYSQL_MONITOR *handle = mon->handle; MYSQL_ROW row; MYSQL_RES *result; -int num_fields; int isslave = 0; int ismaster = 0; char *uname = mon->user; diff --git a/server/modules/monitor/monitor_common.c b/server/modules/monitor/monitor_common.c index b9c6ce28e..2001b2bec 100644 --- a/server/modules/monitor/monitor_common.c +++ b/server/modules/monitor/monitor_common.c @@ -112,4 +112,53 @@ void mon_append_node_names(MONITOR_SERVERS* start,char* str, int len) strncat(str,ptr->server->unique_name,len); ptr = ptr->next; } -} \ No newline at end of file +} + +/** + * 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; +} diff --git a/server/modules/monitor/monitor_common.h b/server/modules/monitor/monitor_common.h index 2d56c7e81..1c493b10a 100644 --- a/server/modules/monitor/monitor_common.h +++ b/server/modules/monitor/monitor_common.h @@ -35,4 +35,6 @@ void mon_append_node_names(MONITOR_SERVERS* start,char* str, int len); char* mon_get_event_type(MONITOR_SERVERS* node); void monitor_clear_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 diff --git a/server/modules/monitor/mysql_mon.c b/server/modules/monitor/mysql_mon.c index 8cd83763e..a60e10e5e 100644 --- a/server/modules/monitor/mysql_mon.c +++ b/server/modules/monitor/mysql_mon.c @@ -77,8 +77,6 @@ static void *startMonitor(void *,void*); static void stopMonitor(void *); static void diagnostics(DCB *, void *); 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 *getSlaveOfNodeId(MONITOR_SERVERS *, long); static MONITOR_SERVERS *get_replication_tree(MONITOR *, int); @@ -807,55 +805,6 @@ MYSQL_MONITOR *handle = (MYSQL_MONITOR *)arg; 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 * diff --git a/server/modules/monitor/ndbcluster_mon.c b/server/modules/monitor/ndbcluster_mon.c index 26d3db708..235eb7f00 100644 --- a/server/modules/monitor/ndbcluster_mon.c +++ b/server/modules/monitor/ndbcluster_mon.c @@ -122,7 +122,7 @@ CONFIG_PARAMETER* params = (CONFIG_PARAMETER*)opt; spinlock_init(&handle->lock); } - handle->tid = (THREAD)thread_start(monitorMain, handle); + handle->tid = (THREAD)thread_start(monitorMain, mon); return handle; } @@ -356,10 +356,10 @@ size_t nrounds = 0; while (ptr) { - unsigned int prev_status = ptr->server->status; + ptr->mon_prev_status = ptr->server->status; 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)) { LOGIF(LD, (skygw_log_write_flush(