From 6fff5a4f23d300df3148ab9312994e1f97e7f280 Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Wed, 16 May 2018 14:58:01 +0300 Subject: [PATCH] MXS-1775 Preparatory work for moving main loop to MonitorInstance --- server/modules/monitor/galeramon/galeramon.cc | 33 +++++--------- server/modules/monitor/galeramon/galeramon.hh | 5 ++- server/modules/monitor/mmmon/mmmon.cc | 43 +++++++------------ .../monitor/ndbclustermon/ndbclustermon.cc | 10 +---- 4 files changed, 32 insertions(+), 59 deletions(-) diff --git a/server/modules/monitor/galeramon/galeramon.cc b/server/modules/monitor/galeramon/galeramon.cc index 034c91feb..9367e6290 100644 --- a/server/modules/monitor/galeramon/galeramon.cc +++ b/server/modules/monitor/galeramon/galeramon.cc @@ -110,6 +110,7 @@ GaleraMonitor::GaleraMonitor(MXS_MONITOR *mon) , m_use_priority(false) , m_set_donor_nodes(false) , m_galera_nodes_info(NULL) + , m_log_no_members(false) { HASHTABLE *nodes_info = hashtable_alloc(MAX_NUM_SLAVES, hashtable_item_strhash, @@ -160,6 +161,7 @@ void GaleraMonitor::configure(const MXS_CONFIG_PARAMETER* params) m_root_node_as_master = config_get_bool(params, "root_node_as_master"); m_use_priority = config_get_bool(params, "use_priority"); m_set_donor_nodes = config_get_bool(params, "set_donor_nodes"); + m_log_no_members = true; /* Reset all data in the hashtable */ reset_cluster_info(); @@ -450,24 +452,12 @@ void GaleraMonitor::monitorDatabase(MXS_MONITORED_SERVER *database) */ void GaleraMonitor::main() { - MXS_MONITORED_SERVER *ptr; size_t nrounds = 0; - MXS_MONITORED_SERVER *candidate_master = NULL; - int master_stickiness; - int is_cluster = 0; - int log_no_members = 1; - - master_stickiness = m_disableMasterFailback; load_server_journal(m_monitor, NULL); - while (1) + while (!m_shutdown) { - if (m_shutdown) - { - return; - } - /** Wait base interval */ thread_millisleep(MXS_MON_BASE_INTERVAL_MS); @@ -487,13 +477,12 @@ void GaleraMonitor::main() nrounds += 1; - /* reset cluster members counter */ - is_cluster = 0; + int is_cluster = 0; lock_monitor_servers(m_monitor); servers_status_pending_to_current(m_monitor); - ptr = m_monitor->monitored_servers; + MXS_MONITORED_SERVER* ptr = m_monitor->monitored_servers; while (ptr) { ptr->mon_prev_status = ptr->server->status; @@ -538,9 +527,9 @@ void GaleraMonitor::main() */ /* get the candidate master, following MXS_MIN(node_id) rule */ - candidate_master = get_candidate_master(); + MXS_MONITORED_SERVER *candidate_master = get_candidate_master(); - m_master = set_cluster_master(m_master, candidate_master, master_stickiness); + m_master = set_cluster_master(m_master, candidate_master, m_disableMasterFailback); ptr = m_monitor->monitored_servers; @@ -579,17 +568,17 @@ void GaleraMonitor::main() ptr = ptr->next; } - if (is_cluster == 0 && log_no_members) + if (is_cluster == 0 && m_log_no_members) { MXS_ERROR("There are no cluster members"); - log_no_members = 0; + m_log_no_members = false; } else { - if (is_cluster > 0 && log_no_members == 0) + if (is_cluster > 0 && m_log_no_members == 0) { MXS_NOTICE("Found cluster members"); - log_no_members = 1; + m_log_no_members = true; } } diff --git a/server/modules/monitor/galeramon/galeramon.hh b/server/modules/monitor/galeramon/galeramon.hh index 1ed57ee97..87c1c2072 100644 --- a/server/modules/monitor/galeramon/galeramon.hh +++ b/server/modules/monitor/galeramon/galeramon.hh @@ -70,12 +70,13 @@ private: bool m_disableMasterRoleSetting; /**< Monitor flag to disable setting master role */ MXS_MONITORED_SERVER *m_master; /**< Master server for MySQL Master/Slave replication */ bool m_root_node_as_master; /**< Whether we require that the Master should - * have a wsrep_local_index of 0 */ + * have a wsrep_local_index of 0 */ bool m_use_priority; /**< Use server priorities */ bool m_set_donor_nodes; /**< set the wrep_sst_donor variable with an - * ordered list of nodes */ + * ordered list of nodes */ HASHTABLE *m_galera_nodes_info; /**< Contains Galera Cluster variables of all nodes */ GALERA_CLUSTER_INFO m_cluster_info; /**< Contains Galera cluster info */ + bool m_log_no_members; /**< Should we log if no member are found. */ GaleraMonitor(MXS_MONITOR* monitor); ~GaleraMonitor(); diff --git a/server/modules/monitor/mmmon/mmmon.cc b/server/modules/monitor/mmmon/mmmon.cc index 4650f1770..47c2e8844 100644 --- a/server/modules/monitor/mmmon/mmmon.cc +++ b/server/modules/monitor/mmmon/mmmon.cc @@ -441,23 +441,12 @@ monitorDatabase(MXS_MONITOR* mon, MXS_MONITORED_SERVER *database) */ void MMMonitor::main() { - MXS_MONITOR* mon = m_monitor; - MXS_MONITORED_SERVER *ptr; - int detect_stale_master = false; - MXS_MONITORED_SERVER *root_master = NULL; size_t nrounds = 0; - detect_stale_master = m_detectStaleMaster; + load_server_journal(m_monitor, &m_master); - load_server_journal(mon, &m_master); - - while (1) + while (!m_shutdown) { - if (m_shutdown) - { - return; - } - /** Wait base interval */ thread_millisleep(MXS_MON_BASE_INTERVAL_MS); /** @@ -467,19 +456,19 @@ void MMMonitor::main() * round. */ if (nrounds != 0 && - (((nrounds * MXS_MON_BASE_INTERVAL_MS) % mon->interval) >= - MXS_MON_BASE_INTERVAL_MS) && (!mon->server_pending_changes)) + (((nrounds * MXS_MON_BASE_INTERVAL_MS) % m_monitor->interval) >= + MXS_MON_BASE_INTERVAL_MS) && (!m_monitor->server_pending_changes)) { nrounds += 1; continue; } nrounds += 1; - lock_monitor_servers(mon); - servers_status_pending_to_current(mon); + lock_monitor_servers(m_monitor); + servers_status_pending_to_current(m_monitor); /* start from the first server in the list */ - ptr = mon->monitored_servers; + MXS_MONITORED_SERVER* ptr = m_monitor->monitored_servers; while (ptr) { @@ -487,7 +476,7 @@ void MMMonitor::main() ptr->pending_status = ptr->server->status; /* monitor current node */ - monitorDatabase(mon, ptr); + monitorDatabase(m_monitor, ptr); if (mon_status_changed(ptr) || mon_print_fail_status(ptr)) @@ -512,17 +501,17 @@ void MMMonitor::main() } /* Get Master server pointer */ - root_master = get_current_master(); + MXS_MONITORED_SERVER *root_master = get_current_master(); /* Update server status from monitor pending status on that server*/ - ptr = mon->monitored_servers; + ptr = m_monitor->monitored_servers; while (ptr) { if (!SERVER_IN_MAINT(ptr->server)) { /* If "detect_stale_master" option is On, let's use the previus master */ - if (detect_stale_master && root_master && + if (m_detectStaleMaster && root_master && (!strcmp(ptr->server->address, root_master->server->address) && ptr->server->port == root_master->server->port) && (ptr->server->status & SERVER_MASTER) && !(ptr->pending_status & SERVER_MASTER)) @@ -546,12 +535,12 @@ void MMMonitor::main() * After updating the status of all servers, check if monitor events * need to be launched. */ - mon_process_state_changes(mon, m_script.empty() ? NULL : m_script.c_str(), m_events); + mon_process_state_changes(m_monitor, m_script.empty() ? NULL : m_script.c_str(), m_events); - mon_hangup_failed_servers(mon); - servers_status_current_to_pending(mon); - store_server_journal(mon, m_master); - release_monitor_servers(mon); + mon_hangup_failed_servers(m_monitor); + servers_status_current_to_pending(m_monitor); + store_server_journal(m_monitor, m_master); + release_monitor_servers(m_monitor); } } diff --git a/server/modules/monitor/ndbclustermon/ndbclustermon.cc b/server/modules/monitor/ndbclustermon/ndbclustermon.cc index e5dc918d4..0a0cfadc3 100644 --- a/server/modules/monitor/ndbclustermon/ndbclustermon.cc +++ b/server/modules/monitor/ndbclustermon/ndbclustermon.cc @@ -246,18 +246,12 @@ monitorDatabase(MXS_MONITORED_SERVER *database, char *defaultUser, char *default */ void NDBCMonitor::main() { - MXS_MONITORED_SERVER *ptr; size_t nrounds = 0; load_server_journal(m_monitor, NULL); - while (1) + while (!m_shutdown) { - if (m_shutdown) - { - return; - } - /** Wait base interval */ thread_millisleep(MXS_MON_BASE_INTERVAL_MS); /** @@ -278,7 +272,7 @@ void NDBCMonitor::main() lock_monitor_servers(m_monitor); servers_status_pending_to_current(m_monitor); - ptr = m_monitor->monitored_servers; + MXS_MONITORED_SERVER *ptr = m_monitor->monitored_servers; while (ptr) { ptr->mon_prev_status = ptr->server->status;