MXS-1775 Preparatory work for moving main loop to MonitorInstance
This commit is contained in:
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -76,6 +76,7 @@ private:
|
|||||||
* 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();
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user