MXS-1775 Preparatory work for moving main loop to MonitorInstance

This commit is contained in:
Johan Wikman
2018-05-16 14:58:01 +03:00
parent 6db4ce54a9
commit 6fff5a4f23
4 changed files with 32 additions and 59 deletions

View File

@ -110,6 +110,7 @@ GaleraMonitor::GaleraMonitor(MXS_MONITOR *mon)
, m_use_priority(false) , m_use_priority(false)
, m_set_donor_nodes(false) , m_set_donor_nodes(false)
, m_galera_nodes_info(NULL) , m_galera_nodes_info(NULL)
, m_log_no_members(false)
{ {
HASHTABLE *nodes_info = hashtable_alloc(MAX_NUM_SLAVES, HASHTABLE *nodes_info = hashtable_alloc(MAX_NUM_SLAVES,
hashtable_item_strhash, 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_root_node_as_master = config_get_bool(params, "root_node_as_master");
m_use_priority = config_get_bool(params, "use_priority"); m_use_priority = config_get_bool(params, "use_priority");
m_set_donor_nodes = config_get_bool(params, "set_donor_nodes"); m_set_donor_nodes = config_get_bool(params, "set_donor_nodes");
m_log_no_members = true;
/* Reset all data in the hashtable */ /* Reset all data in the hashtable */
reset_cluster_info(); reset_cluster_info();
@ -450,24 +452,12 @@ void GaleraMonitor::monitorDatabase(MXS_MONITORED_SERVER *database)
*/ */
void GaleraMonitor::main() void GaleraMonitor::main()
{ {
MXS_MONITORED_SERVER *ptr;
size_t nrounds = 0; 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); load_server_journal(m_monitor, NULL);
while (1) while (!m_shutdown)
{ {
if (m_shutdown)
{
return;
}
/** Wait base interval */ /** Wait base interval */
thread_millisleep(MXS_MON_BASE_INTERVAL_MS); thread_millisleep(MXS_MON_BASE_INTERVAL_MS);
@ -487,13 +477,12 @@ void GaleraMonitor::main()
nrounds += 1; nrounds += 1;
/* reset cluster members counter */ int is_cluster = 0;
is_cluster = 0;
lock_monitor_servers(m_monitor); lock_monitor_servers(m_monitor);
servers_status_pending_to_current(m_monitor); servers_status_pending_to_current(m_monitor);
ptr = m_monitor->monitored_servers; MXS_MONITORED_SERVER* ptr = m_monitor->monitored_servers;
while (ptr) while (ptr)
{ {
ptr->mon_prev_status = ptr->server->status; ptr->mon_prev_status = ptr->server->status;
@ -538,9 +527,9 @@ void GaleraMonitor::main()
*/ */
/* get the candidate master, following MXS_MIN(node_id) rule */ /* 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; ptr = m_monitor->monitored_servers;
@ -579,17 +568,17 @@ void GaleraMonitor::main()
ptr = ptr->next; 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"); MXS_ERROR("There are no cluster members");
log_no_members = 0; m_log_no_members = false;
} }
else else
{ {
if (is_cluster > 0 && log_no_members == 0) if (is_cluster > 0 && m_log_no_members == 0)
{ {
MXS_NOTICE("Found cluster members"); MXS_NOTICE("Found cluster members");
log_no_members = 1; m_log_no_members = true;
} }
} }

View File

@ -70,12 +70,13 @@ private:
bool m_disableMasterRoleSetting; /**< Monitor flag to disable setting master role */ bool m_disableMasterRoleSetting; /**< Monitor flag to disable setting master role */
MXS_MONITORED_SERVER *m_master; /**< Master server for MySQL Master/Slave replication */ 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 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_use_priority; /**< Use server priorities */
bool m_set_donor_nodes; /**< set the wrep_sst_donor variable with an 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 */ HASHTABLE *m_galera_nodes_info; /**< Contains Galera Cluster variables of all nodes */
GALERA_CLUSTER_INFO m_cluster_info; /**< Contains Galera cluster info */ 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(MXS_MONITOR* monitor);
~GaleraMonitor(); ~GaleraMonitor();

View File

@ -441,23 +441,12 @@ monitorDatabase(MXS_MONITOR* mon, MXS_MONITORED_SERVER *database)
*/ */
void MMMonitor::main() 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; size_t nrounds = 0;
detect_stale_master = m_detectStaleMaster; load_server_journal(m_monitor, &m_master);
load_server_journal(mon, &m_master); while (!m_shutdown)
while (1)
{ {
if (m_shutdown)
{
return;
}
/** Wait base interval */ /** Wait base interval */
thread_millisleep(MXS_MON_BASE_INTERVAL_MS); thread_millisleep(MXS_MON_BASE_INTERVAL_MS);
/** /**
@ -467,19 +456,19 @@ void MMMonitor::main()
* round. * round.
*/ */
if (nrounds != 0 && if (nrounds != 0 &&
(((nrounds * MXS_MON_BASE_INTERVAL_MS) % mon->interval) >= (((nrounds * MXS_MON_BASE_INTERVAL_MS) % m_monitor->interval) >=
MXS_MON_BASE_INTERVAL_MS) && (!mon->server_pending_changes)) MXS_MON_BASE_INTERVAL_MS) && (!m_monitor->server_pending_changes))
{ {
nrounds += 1; nrounds += 1;
continue; continue;
} }
nrounds += 1; nrounds += 1;
lock_monitor_servers(mon); lock_monitor_servers(m_monitor);
servers_status_pending_to_current(mon); servers_status_pending_to_current(m_monitor);
/* start from the first server in the list */ /* start from the first server in the list */
ptr = mon->monitored_servers; MXS_MONITORED_SERVER* ptr = m_monitor->monitored_servers;
while (ptr) while (ptr)
{ {
@ -487,7 +476,7 @@ void MMMonitor::main()
ptr->pending_status = ptr->server->status; ptr->pending_status = ptr->server->status;
/* monitor current node */ /* monitor current node */
monitorDatabase(mon, ptr); monitorDatabase(m_monitor, ptr);
if (mon_status_changed(ptr) || if (mon_status_changed(ptr) ||
mon_print_fail_status(ptr)) mon_print_fail_status(ptr))
@ -512,17 +501,17 @@ void MMMonitor::main()
} }
/* Get Master server pointer */ /* 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*/ /* Update server status from monitor pending status on that server*/
ptr = mon->monitored_servers; ptr = m_monitor->monitored_servers;
while (ptr) while (ptr)
{ {
if (!SERVER_IN_MAINT(ptr->server)) if (!SERVER_IN_MAINT(ptr->server))
{ {
/* If "detect_stale_master" option is On, let's use the previus master */ /* 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) && (!strcmp(ptr->server->address, root_master->server->address) &&
ptr->server->port == root_master->server->port) && (ptr->server->status & SERVER_MASTER) && ptr->server->port == root_master->server->port) && (ptr->server->status & SERVER_MASTER) &&
!(ptr->pending_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 * After updating the status of all servers, check if monitor events
* need to be launched. * 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); mon_hangup_failed_servers(m_monitor);
servers_status_current_to_pending(mon); servers_status_current_to_pending(m_monitor);
store_server_journal(mon, m_master); store_server_journal(m_monitor, m_master);
release_monitor_servers(mon); release_monitor_servers(m_monitor);
} }
} }

View File

@ -246,18 +246,12 @@ monitorDatabase(MXS_MONITORED_SERVER *database, char *defaultUser, char *default
*/ */
void NDBCMonitor::main() void NDBCMonitor::main()
{ {
MXS_MONITORED_SERVER *ptr;
size_t nrounds = 0; size_t nrounds = 0;
load_server_journal(m_monitor, NULL); load_server_journal(m_monitor, NULL);
while (1) while (!m_shutdown)
{ {
if (m_shutdown)
{
return;
}
/** Wait base interval */ /** Wait base interval */
thread_millisleep(MXS_MON_BASE_INTERVAL_MS); thread_millisleep(MXS_MON_BASE_INTERVAL_MS);
/** /**
@ -278,7 +272,7 @@ void NDBCMonitor::main()
lock_monitor_servers(m_monitor); lock_monitor_servers(m_monitor);
servers_status_pending_to_current(m_monitor); servers_status_pending_to_current(m_monitor);
ptr = m_monitor->monitored_servers; MXS_MONITORED_SERVER *ptr = m_monitor->monitored_servers;
while (ptr) while (ptr)
{ {
ptr->mon_prev_status = ptr->server->status; ptr->mon_prev_status = ptr->server->status;