MXS-1703 Add and use convenience functions for common macros/fields
Also add debug assert to MariaDBServer ctor.
This commit is contained in:
parent
f7cc2aed5a
commit
4d6239635e
@ -47,10 +47,8 @@ bool MariaDBMonitor::manual_switchover(SERVER* new_master, SERVER* current_maste
|
||||
{
|
||||
bool switched = do_switchover(&found_curr_master, &found_new_master, error_out);
|
||||
const char AUTOSELECT[] = "<autoselect>";
|
||||
const char* curr_master_name = found_curr_master ?
|
||||
found_curr_master->server_base->server->unique_name : AUTOSELECT;
|
||||
const char* new_master_name = found_new_master ?
|
||||
found_new_master->server_base->server->unique_name : AUTOSELECT;
|
||||
const char* curr_master_name = found_curr_master ? found_curr_master->name() : AUTOSELECT;
|
||||
const char* new_master_name = found_new_master ? found_new_master->name() : AUTOSELECT;
|
||||
|
||||
if (switched)
|
||||
{
|
||||
@ -131,7 +129,6 @@ bool MariaDBMonitor::manual_rejoin(SERVER* rejoin_server, json_t** output)
|
||||
MXS_MONITORED_SERVER* mon_slave_cand = mon_get_monitored_server(m_monitor_base, rejoin_server);
|
||||
if (mon_slave_cand)
|
||||
{
|
||||
const char* master_name = m_master->server_base->server->unique_name;
|
||||
MariaDBServer* slave_cand = get_server_info(mon_slave_cand);
|
||||
|
||||
if (server_is_rejoin_suspect(slave_cand, m_master, output))
|
||||
@ -155,13 +152,14 @@ bool MariaDBMonitor::manual_rejoin(SERVER* rejoin_server, json_t** output)
|
||||
else
|
||||
{
|
||||
PRINT_MXS_JSON_ERROR(output, "Server '%s' cannot replicate from cluster master '%s' "
|
||||
"or it could not be queried.", rejoin_serv_name, master_name);
|
||||
"or it could not be queried.", rejoin_serv_name,
|
||||
m_master->name());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PRINT_MXS_JSON_ERROR(output, "Cluster master '%s' gtid info could not be updated.",
|
||||
master_name);
|
||||
m_master->name());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -346,7 +344,7 @@ uint32_t MariaDBMonitor::do_rejoin(const ServerArray& joinable_servers)
|
||||
for (auto iter = joinable_servers.begin(); iter != joinable_servers.end(); iter++)
|
||||
{
|
||||
MariaDBServer* joinable = *iter;
|
||||
const char* name = joinable->server_base->server->unique_name;
|
||||
const char* name = joinable->name();
|
||||
bool op_success;
|
||||
|
||||
if (joinable->n_slaves_configured == 0)
|
||||
@ -377,7 +375,7 @@ uint32_t MariaDBMonitor::do_rejoin(const ServerArray& joinable_servers)
|
||||
*/
|
||||
bool MariaDBMonitor::cluster_can_be_joined()
|
||||
{
|
||||
return (m_master != NULL && SERVER_IS_MASTER(m_master->server_base->server) && m_master_gtid_domain >= 0);
|
||||
return (m_master != NULL && m_master->is_master() && m_master_gtid_domain >= 0);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -486,8 +484,7 @@ bool MariaDBMonitor::server_is_rejoin_suspect(MariaDBServer* rejoin_cand, MariaD
|
||||
json_t** output)
|
||||
{
|
||||
bool is_suspect = false;
|
||||
auto rejoin_mon_serv = rejoin_cand->server_base;
|
||||
if (!SERVER_IS_MASTER(rejoin_mon_serv->server) && SERVER_IS_RUNNING(rejoin_mon_serv->server))
|
||||
if (rejoin_cand->is_running() && !rejoin_cand->is_master())
|
||||
{
|
||||
SlaveStatusInfo* slave_status = &rejoin_cand->slave_status;
|
||||
// Has no slave connection, yet is not a master.
|
||||
@ -515,8 +512,7 @@ bool MariaDBMonitor::server_is_rejoin_suspect(MariaDBServer* rejoin_cand, MariaD
|
||||
}
|
||||
else if (output != NULL)
|
||||
{
|
||||
PRINT_MXS_JSON_ERROR(output, "Server '%s' is master or not running.",
|
||||
rejoin_mon_serv->server->unique_name);
|
||||
PRINT_MXS_JSON_ERROR(output, "Server '%s' is master or not running.", rejoin_cand->name());
|
||||
}
|
||||
return is_suspect;
|
||||
}
|
||||
@ -540,7 +536,7 @@ bool MariaDBMonitor::do_switchover(MariaDBServer** current_master, MariaDBServer
|
||||
if (*current_master == NULL)
|
||||
{
|
||||
// Autoselect current master.
|
||||
if (m_master && SERVER_IS_MASTER(m_master->server_base->server))
|
||||
if (m_master && m_master->is_master())
|
||||
{
|
||||
demotion_target = m_master;
|
||||
*current_master = demotion_target;
|
||||
@ -690,13 +686,12 @@ bool MariaDBMonitor::do_switchover(MariaDBServer** current_master, MariaDBServer
|
||||
const char QUERY_UNDO[] = "SET GLOBAL read_only=0;";
|
||||
if (mxs_mysql_query(demotion_target->server_base->con, QUERY_UNDO) == 0)
|
||||
{
|
||||
PRINT_MXS_JSON_ERROR(err_out, "read_only disabled on server %s.",
|
||||
demotion_target->server_base->server->unique_name);
|
||||
PRINT_MXS_JSON_ERROR(err_out, "read_only disabled on server %s.", demotion_target->name());
|
||||
}
|
||||
else
|
||||
{
|
||||
PRINT_MXS_JSON_ERROR(err_out, "Could not disable read_only on server %s: '%s'.",
|
||||
demotion_target->server_base->server->unique_name,
|
||||
demotion_target->name(),
|
||||
mysql_error(demotion_target->server_base->con));
|
||||
}
|
||||
|
||||
@ -1041,8 +1036,7 @@ bool MariaDBMonitor::wait_cluster_stabilization(MariaDBServer* new_master, const
|
||||
if (!slave->slave_status.last_error.empty())
|
||||
{
|
||||
// IO or SQL error on slave, replication is a fail
|
||||
MXS_WARNING("Slave '%s' cannot start replication: '%s'.",
|
||||
slave->server_base->server->unique_name,
|
||||
MXS_WARNING("Slave '%s' cannot start replication: '%s'.", slave->name(),
|
||||
slave->slave_status.last_error.c_str());
|
||||
wait_list.erase(wait_list.begin() + i);
|
||||
repl_fails++;
|
||||
@ -1183,7 +1177,7 @@ MariaDBServer* MariaDBMonitor::select_new_master(ServerArray* slaves_out, json_t
|
||||
valid_but_excluded.push_back(cand);
|
||||
const char CANNOT_SELECT[] = "Promotion candidate '%s' is excluded from new "
|
||||
"master selection.";
|
||||
MXS_INFO(CANNOT_SELECT, cand->server_base->server->unique_name);
|
||||
MXS_INFO(CANNOT_SELECT, cand->name());
|
||||
}
|
||||
else if (cand->check_replication_settings())
|
||||
{
|
||||
@ -1212,7 +1206,7 @@ MariaDBServer* MariaDBMonitor::select_new_master(ServerArray* slaves_out, json_t
|
||||
for (auto iter = valid_but_excluded.begin(); iter != valid_but_excluded.end(); iter++)
|
||||
{
|
||||
MariaDBServer* excluded_info = *iter;
|
||||
const char* excluded_name = (*iter)->server_base->server->unique_name;
|
||||
const char* excluded_name = (*iter)->name();
|
||||
if (current_best == NULL)
|
||||
{
|
||||
const char EXCLUDED_ONLY_CAND[] = "Server '%s' is a viable choice for new master, "
|
||||
@ -1458,8 +1452,7 @@ bool MariaDBMonitor::can_replicate_from(MariaDBServer* slave_cand, MariaDBServer
|
||||
bool MariaDBMonitor::mon_process_failover(bool* cluster_modified_out)
|
||||
{
|
||||
ss_dassert(*cluster_modified_out == false);
|
||||
if (config_get_global_options()->passive ||
|
||||
(m_master && SERVER_IS_MASTER(m_master->server_base->server)))
|
||||
if (config_get_global_options()->passive || (m_master && m_master->is_master()))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@ -1692,7 +1685,7 @@ bool MariaDBMonitor::switchover_check(SERVER* new_master, SERVER* current_master
|
||||
bool gtid_ok = true;
|
||||
for (auto iter = m_servers.begin(); iter != m_servers.end(); iter++)
|
||||
{
|
||||
if (SERVER_IS_SLAVE((*iter)->server_base->server) && !uses_gtid((*iter)->server_base, error_out))
|
||||
if ((*iter)->is_slave() && !uses_gtid((*iter)->server_base, error_out))
|
||||
{
|
||||
gtid_ok = false;
|
||||
}
|
||||
|
@ -407,7 +407,7 @@ void MariaDBMonitor::main_loop()
|
||||
// Use the information to find the so far best master server.
|
||||
root_master = find_root_master();
|
||||
|
||||
if (m_master != NULL && SERVER_IS_MASTER(m_master->server_base->server))
|
||||
if (m_master != NULL && m_master->is_master())
|
||||
{
|
||||
// Update cluster-wide values dependant on the current master.
|
||||
update_gtid_domain();
|
||||
@ -451,7 +451,7 @@ void MariaDBMonitor::main_loop()
|
||||
}
|
||||
}
|
||||
|
||||
if (root_master && SERVER_IS_MASTER(root_master->server_base->server))
|
||||
if (root_master && root_master->is_master())
|
||||
{
|
||||
SERVER* root_master_server = root_master->server_base->server;
|
||||
// Clear slave and stale slave status bits from current master
|
||||
@ -492,8 +492,7 @@ void MariaDBMonitor::main_loop()
|
||||
|
||||
/* Generate the replication heartbeat event by performing an update */
|
||||
if (m_detect_replication_lag && root_master &&
|
||||
(SERVER_IS_MASTER(root_master->server_base->server) ||
|
||||
SERVER_IS_RELAY_SERVER(root_master->server_base->server)))
|
||||
(root_master->is_master() || SERVER_IS_RELAY_SERVER(root_master->server_base->server)))
|
||||
{
|
||||
measure_replication_lag(root_master);
|
||||
}
|
||||
@ -618,8 +617,7 @@ void MariaDBMonitor::handle_auto_failover(bool* failover_performed)
|
||||
disable_setting(CN_AUTO_FAILOVER);
|
||||
}
|
||||
// If master seems to be down, check if slaves are receiving events.
|
||||
else if (m_verify_master_failure && m_master &&
|
||||
SERVER_IS_DOWN(m_master->server_base->server) && slave_receiving_events())
|
||||
else if (m_verify_master_failure && m_master && m_master->is_down() && slave_receiving_events())
|
||||
{
|
||||
MXS_INFO("Master failure not yet confirmed by slaves, delaying failover.");
|
||||
}
|
||||
@ -688,8 +686,7 @@ void MariaDBMonitor::handle_auto_rejoin()
|
||||
}
|
||||
else
|
||||
{
|
||||
MXS_ERROR("Query error to master '%s' prevented a possible rejoin operation.",
|
||||
m_master->server_base->server->unique_name);
|
||||
MXS_ERROR("Query error to master '%s' prevented a possible rejoin operation.", m_master->name());
|
||||
}
|
||||
}
|
||||
|
||||
@ -1116,7 +1113,7 @@ string monitored_servers_to_string(const ServerArray& servers)
|
||||
for (size_t i = 0; i < array_size; i++)
|
||||
{
|
||||
rval += separator;
|
||||
rval += servers[i]->server_base->server->unique_name;
|
||||
rval += servers[i]->name();
|
||||
separator = ",";
|
||||
}
|
||||
}
|
||||
@ -1132,7 +1129,7 @@ string get_connection_errors(const ServerArray& servers)
|
||||
{
|
||||
const char* error = mysql_error((*iter)->server_base->con);
|
||||
ss_dassert(*error); // Every connection should have an error.
|
||||
rval += separator + (*iter)->server_base->server->unique_name + ": '" + error + "'";
|
||||
rval += separator + (*iter)->name() + ": '" + error + "'";
|
||||
separator = ", ";
|
||||
}
|
||||
return rval;
|
||||
|
@ -42,7 +42,9 @@ MariaDBServer::MariaDBServer(MXS_MONITORED_SERVER* monitored_server)
|
||||
, heartbeat_period(0)
|
||||
, latest_event(0)
|
||||
, gtid_domain_id(-1)
|
||||
{}
|
||||
{
|
||||
ss_dassert(monitored_server);
|
||||
}
|
||||
|
||||
int64_t MariaDBServer::relay_log_events()
|
||||
{
|
||||
@ -323,7 +325,7 @@ void MariaDBServer::read_server_variables()
|
||||
bool MariaDBServer::check_replication_settings(print_repl_warnings_t print_warnings)
|
||||
{
|
||||
bool rval = true;
|
||||
const char* servername = server_base->server->unique_name;
|
||||
const char* servername = name();
|
||||
if (rpl_settings.log_bin == false)
|
||||
{
|
||||
if (print_warnings == WARNINGS_ON)
|
||||
@ -395,16 +397,40 @@ bool MariaDBServer::wait_until_gtid(const GtidList& target, int timeout, json_t*
|
||||
if (error)
|
||||
{
|
||||
PRINT_MXS_JSON_ERROR(err_out, "Failed to update gtid on server '%s' while waiting for catchup.",
|
||||
server_base->server->unique_name);
|
||||
name());
|
||||
}
|
||||
else if (!gtid_reached)
|
||||
{
|
||||
PRINT_MXS_JSON_ERROR(err_out, "Slave catchup timed out on slave '%s'.",
|
||||
server_base->server->unique_name);
|
||||
PRINT_MXS_JSON_ERROR(err_out, "Slave catchup timed out on slave '%s'.", name());
|
||||
}
|
||||
return gtid_reached;
|
||||
}
|
||||
|
||||
bool MariaDBServer::is_master() const
|
||||
{
|
||||
return SERVER_IS_MASTER(server_base->server);
|
||||
}
|
||||
|
||||
bool MariaDBServer::is_slave() const
|
||||
{
|
||||
return SERVER_IS_SLAVE(server_base->server);
|
||||
}
|
||||
|
||||
bool MariaDBServer::is_running() const
|
||||
{
|
||||
return SERVER_IS_RUNNING(server_base->server);
|
||||
}
|
||||
|
||||
bool MariaDBServer::is_down() const
|
||||
{
|
||||
return SERVER_IS_DOWN(server_base->server);
|
||||
}
|
||||
|
||||
const char* MariaDBServer::name() const
|
||||
{
|
||||
return server_base->server->unique_name;
|
||||
}
|
||||
|
||||
QueryResult::QueryResult(MYSQL_RES* resultset)
|
||||
: m_resultset(resultset)
|
||||
, m_columns(-1)
|
||||
|
@ -161,6 +161,41 @@ public:
|
||||
* @return True, if target gtid was reached within allotted time
|
||||
*/
|
||||
bool wait_until_gtid(const GtidList& target, int timeout, json_t** err_out);
|
||||
|
||||
/**
|
||||
* Convenience method for SERVER_IS_MASTER
|
||||
*
|
||||
* @return True if server is a master
|
||||
*/
|
||||
bool is_master() const;
|
||||
|
||||
/**
|
||||
* Convenience method for SERVER_IS_SLAVE
|
||||
*
|
||||
* @return True if server is a slave
|
||||
*/
|
||||
bool is_slave() const;
|
||||
|
||||
/**
|
||||
* Convenience method for SERVER_IS_RUNNING
|
||||
*
|
||||
* @return True if server is running
|
||||
*/
|
||||
bool is_running() const;
|
||||
|
||||
/**
|
||||
* Convenience method for SERVER_IS_DOWN
|
||||
*
|
||||
* @return True if server is down
|
||||
*/
|
||||
bool is_down() const;
|
||||
|
||||
/**
|
||||
* Returns the server name.
|
||||
*
|
||||
* @return Server unique name
|
||||
*/
|
||||
const char* name() const;
|
||||
};
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user