Clean up monitor initialization and destruction
Since monitors are now freed at MaxScale exit, the server data should be freed. Also, gtid domain variables are now initialized with a common constant.
This commit is contained in:
@ -354,7 +354,7 @@ uint32_t MariaDBMonitor::do_rejoin(const ServerArray& joinable_servers, json_t**
|
|||||||
*/
|
*/
|
||||||
bool MariaDBMonitor::cluster_can_be_joined()
|
bool MariaDBMonitor::cluster_can_be_joined()
|
||||||
{
|
{
|
||||||
return (m_master != NULL && m_master->is_master() && m_master_gtid_domain >= 0);
|
return (m_master != NULL && m_master->is_master() && m_master_gtid_domain != GTID_DOMAIN_UNKNOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -503,7 +503,7 @@ bool MariaDBMonitor::do_switchover(MariaDBServer** current_master, MariaDBServer
|
|||||||
demotion_target = *current_master;
|
demotion_target = *current_master;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_master_gtid_domain < 0)
|
if (m_master_gtid_domain == GTID_DOMAIN_UNKNOWN)
|
||||||
{
|
{
|
||||||
PRINT_MXS_JSON_ERROR(err_out, "Cluster gtid domain is unknown. Cannot switchover.");
|
PRINT_MXS_JSON_ERROR(err_out, "Cluster gtid domain is unknown. Cannot switchover.");
|
||||||
return false;
|
return false;
|
||||||
@ -657,7 +657,7 @@ bool MariaDBMonitor::do_switchover(MariaDBServer** current_master, MariaDBServer
|
|||||||
bool MariaDBMonitor::do_failover(json_t** err_out)
|
bool MariaDBMonitor::do_failover(json_t** err_out)
|
||||||
{
|
{
|
||||||
// Topology has already been tested to be simple.
|
// Topology has already been tested to be simple.
|
||||||
if (m_master_gtid_domain < 0)
|
if (m_master_gtid_domain == GTID_DOMAIN_UNKNOWN)
|
||||||
{
|
{
|
||||||
PRINT_MXS_JSON_ERROR(err_out, "Cluster gtid domain is unknown. Cannot failover.");
|
PRINT_MXS_JSON_ERROR(err_out, "Cluster gtid domain is unknown. Cannot failover.");
|
||||||
return false;
|
return false;
|
||||||
|
@ -56,31 +56,29 @@ const int PORT_UNKNOWN = 0;
|
|||||||
MariaDBMonitor::MariaDBMonitor(MXS_MONITOR* monitor_base)
|
MariaDBMonitor::MariaDBMonitor(MXS_MONITOR* monitor_base)
|
||||||
: m_monitor_base(monitor_base)
|
: m_monitor_base(monitor_base)
|
||||||
, m_id(config_get_global_options()->id)
|
, m_id(config_get_global_options()->id)
|
||||||
, m_master_gtid_domain(-1)
|
, m_master_gtid_domain(GTID_DOMAIN_UNKNOWN)
|
||||||
, m_external_master_port(PORT_UNKNOWN)
|
, m_external_master_port(PORT_UNKNOWN)
|
||||||
, m_warn_set_standalone_master(true)
|
, m_warn_set_standalone_master(true)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
MariaDBMonitor::~MariaDBMonitor()
|
MariaDBMonitor::~MariaDBMonitor()
|
||||||
{}
|
{
|
||||||
|
clear_server_info();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize the server info hashtable.
|
* Reset and initialize server arrays and related data.
|
||||||
*/
|
*/
|
||||||
void MariaDBMonitor::init_server_info()
|
void MariaDBMonitor::reset_server_info()
|
||||||
{
|
{
|
||||||
// If this monitor is being restarted, the server data needs to be freed.
|
// If this monitor is being restarted, the server data needs to be freed.
|
||||||
for (auto iter = m_servers.begin(); iter != m_servers.end(); iter++)
|
clear_server_info();
|
||||||
{
|
|
||||||
delete *iter;
|
// Next, initialize the data.
|
||||||
}
|
|
||||||
m_servers.clear();
|
|
||||||
for (auto mon_server = m_monitor_base->monitored_servers; mon_server; mon_server = mon_server->next)
|
for (auto mon_server = m_monitor_base->monitored_servers; mon_server; mon_server = mon_server->next)
|
||||||
{
|
{
|
||||||
m_servers.push_back(new MariaDBServer(mon_server));
|
m_servers.push_back(new MariaDBServer(mon_server));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_server_info.clear();
|
|
||||||
for (auto iter = m_servers.begin(); iter != m_servers.end(); iter++)
|
for (auto iter = m_servers.begin(); iter != m_servers.end(); iter++)
|
||||||
{
|
{
|
||||||
auto mon_server = (*iter)->m_server_base;
|
auto mon_server = (*iter)->m_server_base;
|
||||||
@ -90,6 +88,22 @@ void MariaDBMonitor::init_server_info()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MariaDBMonitor::clear_server_info()
|
||||||
|
{
|
||||||
|
for (auto iter = m_servers.begin(); iter != m_servers.end(); iter++)
|
||||||
|
{
|
||||||
|
delete *iter;
|
||||||
|
}
|
||||||
|
// All MariaDBServer*:s are now invalid, as well as any dependant data.
|
||||||
|
m_servers.clear();
|
||||||
|
m_server_info.clear();
|
||||||
|
m_excluded_servers.clear();
|
||||||
|
m_master = NULL;
|
||||||
|
m_master_gtid_domain = GTID_DOMAIN_UNKNOWN;
|
||||||
|
m_external_master_host.clear();
|
||||||
|
m_external_master_port = PORT_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get monitor-specific server info for the monitored server.
|
* Get monitor-specific server info for the monitored server.
|
||||||
*
|
*
|
||||||
@ -136,12 +150,10 @@ MariaDBMonitor* MariaDBMonitor::create(MXS_MONITOR *monitor)
|
|||||||
bool MariaDBMonitor::start(const MXS_CONFIG_PARAMETER* params)
|
bool MariaDBMonitor::start(const MXS_CONFIG_PARAMETER* params)
|
||||||
{
|
{
|
||||||
bool error = false;
|
bool error = false;
|
||||||
|
|
||||||
/* Always reset these values. The server dependent values must be reset as servers could have been
|
|
||||||
* added and removed. */
|
|
||||||
m_keep_running = true;
|
m_keep_running = true;
|
||||||
m_master = NULL;
|
/* Reset all monitored state info. The server dependent values must be reset as servers could have been
|
||||||
init_server_info();
|
* added, removed and modified. */
|
||||||
|
reset_server_info();
|
||||||
|
|
||||||
if (!load_config_params(params))
|
if (!load_config_params(params))
|
||||||
{
|
{
|
||||||
@ -477,7 +489,7 @@ void MariaDBMonitor::main_loop()
|
|||||||
void MariaDBMonitor::update_gtid_domain()
|
void MariaDBMonitor::update_gtid_domain()
|
||||||
{
|
{
|
||||||
int64_t domain = m_master->m_gtid_domain_id;
|
int64_t domain = m_master->m_gtid_domain_id;
|
||||||
if (m_master_gtid_domain >= 0 && domain != m_master_gtid_domain)
|
if (m_master_gtid_domain != GTID_DOMAIN_UNKNOWN && domain != m_master_gtid_domain)
|
||||||
{
|
{
|
||||||
MXS_NOTICE("Gtid domain id of master has changed: %" PRId64 " -> %" PRId64 ".",
|
MXS_NOTICE("Gtid domain id of master has changed: %" PRId64 " -> %" PRId64 ".",
|
||||||
m_master_gtid_domain, domain);
|
m_master_gtid_domain, domain);
|
||||||
|
@ -173,7 +173,8 @@ private:
|
|||||||
// Base methods
|
// Base methods
|
||||||
MariaDBMonitor(MXS_MONITOR* monitor_base);
|
MariaDBMonitor(MXS_MONITOR* monitor_base);
|
||||||
~MariaDBMonitor();
|
~MariaDBMonitor();
|
||||||
void init_server_info();
|
void reset_server_info();
|
||||||
|
void clear_server_info();
|
||||||
bool load_config_params(const MXS_CONFIG_PARAMETER* params);
|
bool load_config_params(const MXS_CONFIG_PARAMETER* params);
|
||||||
bool set_replication_credentials(const MXS_CONFIG_PARAMETER* params);
|
bool set_replication_credentials(const MXS_CONFIG_PARAMETER* params);
|
||||||
MariaDBServer* get_server_info(MXS_MONITORED_SERVER* db);
|
MariaDBServer* get_server_info(MXS_MONITORED_SERVER* db);
|
||||||
|
@ -15,3 +15,5 @@
|
|||||||
|
|
||||||
/** Server id default value */
|
/** Server id default value */
|
||||||
const int64_t SERVER_ID_UNKNOWN = -1;
|
const int64_t SERVER_ID_UNKNOWN = -1;
|
||||||
|
/** Default gtid domain */
|
||||||
|
const int64_t GTID_DOMAIN_UNKNOWN = -1;
|
@ -33,3 +33,4 @@
|
|||||||
} while (false)
|
} while (false)
|
||||||
|
|
||||||
extern const int64_t SERVER_ID_UNKNOWN;
|
extern const int64_t SERVER_ID_UNKNOWN;
|
||||||
|
extern const int64_t GTID_DOMAIN_UNKNOWN;
|
@ -49,7 +49,7 @@ MariaDBServer::MariaDBServer(MXS_MONITORED_SERVER* monitored_server)
|
|||||||
, m_n_slave_heartbeats(0)
|
, m_n_slave_heartbeats(0)
|
||||||
, m_heartbeat_period(0)
|
, m_heartbeat_period(0)
|
||||||
, m_latest_event(0)
|
, m_latest_event(0)
|
||||||
, m_gtid_domain_id(-1)
|
, m_gtid_domain_id(GTID_DOMAIN_UNKNOWN)
|
||||||
{
|
{
|
||||||
ss_dassert(monitored_server);
|
ss_dassert(monitored_server);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user