From cfa07c69ffb71cf6e69eb0c2ea9510631d53386f Mon Sep 17 00:00:00 2001 From: Esa Korhonen Date: Wed, 25 Jul 2018 14:56:18 +0300 Subject: [PATCH] Clean up switchover_check_current() Now uses MariaDBServer. --- .../mariadbmon/cluster_manipulation.cc | 34 +++++++++++-------- .../modules/monitor/mariadbmon/mariadbmon.hh | 3 +- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/server/modules/monitor/mariadbmon/cluster_manipulation.cc b/server/modules/monitor/mariadbmon/cluster_manipulation.cc index 912f27d00..8c914c9c7 100644 --- a/server/modules/monitor/mariadbmon/cluster_manipulation.cc +++ b/server/modules/monitor/mariadbmon/cluster_manipulation.cc @@ -1205,25 +1205,25 @@ bool MariaDBMonitor::is_candidate_better(const MariaDBServer* current_best, cons * @return True if current master seems ok. False, if there is some error with the * specified current master. */ -bool MariaDBMonitor::switchover_check_current(const MXS_MONITORED_SERVER* suggested_curr_master, +bool MariaDBMonitor::switchover_check_current(const MariaDBServer* suggested_curr_master, json_t** error_out) const { ss_dassert(suggested_curr_master); bool server_is_master = false; - MXS_MONITORED_SERVER* extra_master = NULL; // A master server which is not the suggested one - for (MXS_MONITORED_SERVER* mon_serv = m_monitor->monitored_servers; - mon_serv != NULL && extra_master == NULL; - mon_serv = mon_serv->next) + MariaDBServer* extra_master = NULL; // A master server which is not the suggested one + + for (auto iter = m_servers.begin(); iter != m_servers.end() && extra_master == NULL; iter++) { - if (status_is_master(mon_serv->pending_status)) + MariaDBServer* server = *iter; + if (server->is_master()) { - if (mon_serv == suggested_curr_master) + if (server == suggested_curr_master) { server_is_master = true; } else { - extra_master = mon_serv; + extra_master = server; } } } @@ -1231,12 +1231,12 @@ bool MariaDBMonitor::switchover_check_current(const MXS_MONITORED_SERVER* sugges if (!server_is_master) { PRINT_MXS_JSON_ERROR(error_out, "Server '%s' is not the current master or it's in maintenance.", - suggested_curr_master->server->name); + suggested_curr_master->name()); } else if (extra_master) { PRINT_MXS_JSON_ERROR(error_out, "Cluster has an additional master server '%s'.", - extra_master->server->name); + extra_master->name()); } return server_is_master && !extra_master; } @@ -1616,13 +1616,17 @@ bool MariaDBMonitor::switchover_check(SERVER* new_master, SERVER* current_master current_master_ok = false; PRINT_MXS_JSON_ERROR(error_out, NO_SERVER, current_master->name, m_monitor->name); } - else if (!switchover_check_current(mon_curr_master, error_out)) - { - current_master_ok = false; - } else { - *current_master_out = get_server_info(mon_curr_master); + MariaDBServer* found_curr_master = get_server_info(mon_curr_master); + if (switchover_check_current(found_curr_master, error_out)) + { + *current_master_out = get_server_info(mon_curr_master); + } + else + { + current_master_ok = false; + } } } diff --git a/server/modules/monitor/mariadbmon/mariadbmon.hh b/server/modules/monitor/mariadbmon/mariadbmon.hh index d0be714cc..e58373fe6 100644 --- a/server/modules/monitor/mariadbmon/mariadbmon.hh +++ b/server/modules/monitor/mariadbmon/mariadbmon.hh @@ -225,8 +225,7 @@ private: MariaDBServer** new_master_out, MariaDBServer** current_master_out, json_t** error_out); bool switchover_check_new(const MariaDBServer* new_master_cand, json_t** error); - bool switchover_check_current(const MXS_MONITORED_SERVER* suggested_curr_master, - json_t** error_out) const; + bool switchover_check_current(const MariaDBServer* suggested_curr_master, json_t** error_out) const; bool do_switchover(MariaDBServer** current_master, MariaDBServer** new_master, json_t** err_out); bool switchover_check_preferred_master(MariaDBServer* preferred, json_t** err_out); bool switchover_demote_master(MariaDBServer* current_master,