MXS-2271 Store monitored servers in a vector
The array is still a public member because it's used in several non-member functions.
This commit is contained in:
@ -129,12 +129,9 @@ void ClustrixMonitor::choose_hub()
|
||||
// If that fails, then we check the bootstrap servers, but only if
|
||||
// it was not checked above.
|
||||
|
||||
auto b = begin(*(this->monitored_servers));
|
||||
auto e = end(*(this->monitored_servers));
|
||||
|
||||
for (auto it = b; !pHub_con && (it != e); ++it)
|
||||
for (auto it = m_servers.begin(); !pHub_con && (it != m_servers.end()); ++it)
|
||||
{
|
||||
MXS_MONITORED_SERVER& ms = *it;
|
||||
MXS_MONITORED_SERVER& ms = **it;
|
||||
|
||||
if (ips.find(ms.server->address) == ips.end())
|
||||
{
|
||||
@ -444,40 +441,36 @@ bool ClustrixMonitor::check_cluster_membership(std::map<int, ClustrixMembership>
|
||||
|
||||
void ClustrixMonitor::update_server_statuses()
|
||||
{
|
||||
mxb_assert(this->monitored_servers);
|
||||
mxb_assert(!m_servers.empty());
|
||||
|
||||
auto b = std::begin(*this->monitored_servers);
|
||||
auto e = std::end(*this->monitored_servers);
|
||||
for (auto ms : m_servers)
|
||||
{
|
||||
monitor_stash_current_status(ms);
|
||||
|
||||
for_each(b, e,
|
||||
[this](MXS_MONITORED_SERVER& ms) {
|
||||
monitor_stash_current_status(&ms);
|
||||
auto it = find_if(m_nodes.begin(), m_nodes.end(),
|
||||
[ms](const std::pair<int,ClustrixNode>& element) -> bool {
|
||||
const ClustrixNode& info = element.second;
|
||||
return ms->server->address == info.ip();
|
||||
});
|
||||
|
||||
auto it = find_if(m_nodes.begin(), m_nodes.end(),
|
||||
[&ms](const std::pair<int,ClustrixNode>& element) -> bool {
|
||||
const ClustrixNode& info = element.second;
|
||||
return ms.server->address == info.ip();
|
||||
});
|
||||
if (it != m_nodes.end())
|
||||
{
|
||||
const ClustrixNode& info = it->second;
|
||||
|
||||
if (it != m_nodes.end())
|
||||
{
|
||||
const ClustrixNode& info = it->second;
|
||||
|
||||
if (info.is_running())
|
||||
{
|
||||
monitor_set_pending_status(&ms, SERVER_RUNNING);
|
||||
}
|
||||
else
|
||||
{
|
||||
monitor_clear_pending_status(&ms, SERVER_RUNNING);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
monitor_clear_pending_status(&ms, SERVER_RUNNING);
|
||||
}
|
||||
|
||||
});
|
||||
if (info.is_running())
|
||||
{
|
||||
monitor_set_pending_status(ms, SERVER_RUNNING);
|
||||
}
|
||||
else
|
||||
{
|
||||
monitor_clear_pending_status(ms, SERVER_RUNNING);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
monitor_clear_pending_status(ms, SERVER_RUNNING);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ClustrixMonitor::make_health_check()
|
||||
|
@ -251,9 +251,7 @@ void GaleraMonitor::post_tick()
|
||||
|
||||
m_master = set_cluster_master(m_master, candidate_master, m_disableMasterFailback);
|
||||
|
||||
MXS_MONITORED_SERVER* ptr = m_monitor->monitored_servers;
|
||||
|
||||
while (ptr)
|
||||
for (auto ptr : m_servers)
|
||||
{
|
||||
const int repl_bits = (SERVER_SLAVE | SERVER_MASTER | SERVER_MASTER_STICKINESS);
|
||||
if ((ptr->pending_status & SERVER_JOINED) && !m_disableMasterRoleSetting)
|
||||
@ -288,7 +286,6 @@ void GaleraMonitor::post_tick()
|
||||
monitor_clear_pending_status(ptr, repl_bits);
|
||||
monitor_set_pending_status(ptr, 0);
|
||||
}
|
||||
ptr = ptr->next;
|
||||
}
|
||||
|
||||
if (is_cluster == 0 && m_log_no_members)
|
||||
@ -363,13 +360,12 @@ static bool using_xtrabackup(MXS_MONITORED_SERVER* database, const char* server_
|
||||
*/
|
||||
MXS_MONITORED_SERVER* GaleraMonitor::get_candidate_master()
|
||||
{
|
||||
MXS_MONITORED_SERVER* moitor_servers = m_monitor->monitored_servers;
|
||||
MXS_MONITORED_SERVER* candidate_master = NULL;
|
||||
long min_id = -1;
|
||||
int minval = INT_MAX;
|
||||
int currval;
|
||||
/* set min_id to the lowest value of moitor_servers->server->node_id */
|
||||
while (moitor_servers)
|
||||
for (auto moitor_servers : m_servers)
|
||||
{
|
||||
if (!moitor_servers->server->is_in_maint()
|
||||
&& (moitor_servers->pending_status & SERVER_JOINED))
|
||||
@ -402,7 +398,6 @@ MXS_MONITORED_SERVER* GaleraMonitor::get_candidate_master()
|
||||
}
|
||||
}
|
||||
}
|
||||
moitor_servers = moitor_servers->next;
|
||||
}
|
||||
|
||||
if (!m_use_priority && !m_disableMasterFailback
|
||||
@ -513,10 +508,8 @@ void GaleraMonitor::update_sst_donor_nodes(int is_cluster)
|
||||
|
||||
strcpy(donor_list, DONOR_LIST_SET_VAR);
|
||||
|
||||
ptr = m_monitor->monitored_servers;
|
||||
|
||||
/* Create an array of slave nodes */
|
||||
while (ptr)
|
||||
for (auto ptr : m_servers)
|
||||
{
|
||||
if ((ptr->pending_status & SERVER_JOINED) && (ptr->pending_status & SERVER_SLAVE))
|
||||
{
|
||||
@ -533,7 +526,6 @@ void GaleraMonitor::update_sst_donor_nodes(int is_cluster)
|
||||
ignore_priority = false;
|
||||
}
|
||||
}
|
||||
ptr = ptr->next;
|
||||
}
|
||||
|
||||
/* Set order type */
|
||||
|
@ -78,7 +78,7 @@ void MariaDBMonitor::reset_server_info()
|
||||
clear_server_info();
|
||||
|
||||
// Next, initialize the data.
|
||||
for (auto mon_server = m_monitor->monitored_servers; mon_server; mon_server = mon_server->next)
|
||||
for (auto mon_server : Monitor::m_servers)
|
||||
{
|
||||
m_servers.push_back(new MariaDBServer(mon_server, m_servers.size(), m_assume_unique_hostnames));
|
||||
}
|
||||
@ -433,8 +433,9 @@ void MariaDBMonitor::tick()
|
||||
{
|
||||
/* Update MXS_MONITORED_SERVER->pending_status. This is where the monitor loop writes it's findings.
|
||||
* Also, backup current status so that it can be compared to any deduced state. */
|
||||
for (auto mon_srv = m_monitor->monitored_servers; mon_srv; mon_srv = mon_srv->next)
|
||||
for (auto srv : m_servers)
|
||||
{
|
||||
auto mon_srv = srv->m_server_base;
|
||||
auto status = mon_srv->server->status;
|
||||
mon_srv->pending_status = status;
|
||||
mon_srv->mon_prev_status = status;
|
||||
|
@ -322,7 +322,7 @@ void MMMonitor::post_tick()
|
||||
|
||||
/* Update server status from monitor pending status on that server*/
|
||||
|
||||
for (MXS_MONITORED_SERVER* ptr = m_monitor->monitored_servers; ptr; ptr = ptr->next)
|
||||
for (MXS_MONITORED_SERVER* ptr : m_servers)
|
||||
{
|
||||
if (!ptr->server->is_in_maint())
|
||||
{
|
||||
@ -367,9 +367,7 @@ MXS_MONITORED_SERVER* MMMonitor::get_current_master()
|
||||
Monitor* mon = m_monitor;
|
||||
MXS_MONITORED_SERVER* ptr;
|
||||
|
||||
ptr = mon->monitored_servers;
|
||||
|
||||
while (ptr)
|
||||
for (auto ptr : m_servers)
|
||||
{
|
||||
/* The server could be in SERVER_IN_MAINT
|
||||
* that means SERVER_IS_RUNNING returns 0
|
||||
@ -377,7 +375,6 @@ MXS_MONITORED_SERVER* MMMonitor::get_current_master()
|
||||
*/
|
||||
if (ptr->server->is_down())
|
||||
{
|
||||
ptr = ptr->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -385,8 +382,6 @@ MXS_MONITORED_SERVER* MMMonitor::get_current_master()
|
||||
{
|
||||
m_master = ptr;
|
||||
}
|
||||
|
||||
ptr = ptr->next;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user