MXS-1775 Preparatory work for moving main loop to MonitorInstance
This commit is contained in:
parent
6db4ce54a9
commit
6fff5a4f23
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user