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_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;
}
}

View File

@ -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();

View File

@ -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);
}
}

View File

@ -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;