MXS-1848 Implement createInstance() and destroyInstance()
CreateInstance() (renamed from initMonitor()) and destroyInstance() (renamed from finishMonitor()) have now tentatively been implemented for all monitors. Next step is to 1) change the prototype of startMonitor() to bool (*startMonitor)(MXS_SPECIFIC_MONITOR*, const MXS_MONITOR_PARAMETER*); and assume that mon->handle will always contain the instance, 2) not delete any data in stopMonitor(), 3) add monitorCreateAll() that calls createInstance() for all monitors (and call that in main()), and 4) add monitorDestroyAll() that calls destroyInstance() for all monitors (and call that in main()).
This commit is contained in:
@ -71,7 +71,7 @@ bool MariaDBMonitor::manual_switchover(SERVER* new_master, SERVER* current_maste
|
||||
|
||||
if (stopped)
|
||||
{
|
||||
MariaDBMonitor::start(m_monitor_base, m_monitor_base->parameters);
|
||||
MariaDBMonitor::create_and_start(m_monitor_base, m_monitor_base->parameters);
|
||||
}
|
||||
return rval;
|
||||
}
|
||||
@ -105,7 +105,7 @@ bool MariaDBMonitor::manual_failover(json_t** output)
|
||||
|
||||
if (stopped)
|
||||
{
|
||||
MariaDBMonitor::start(m_monitor_base, m_monitor_base->parameters);
|
||||
MariaDBMonitor::create_and_start(m_monitor_base, m_monitor_base->parameters);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
@ -178,7 +178,7 @@ bool MariaDBMonitor::manual_rejoin(SERVER* rejoin_server, json_t** output)
|
||||
|
||||
if (stopped)
|
||||
{
|
||||
MariaDBMonitor::start(m_monitor_base, m_monitor_base->parameters);
|
||||
MariaDBMonitor::create_and_start(m_monitor_base, m_monitor_base->parameters);
|
||||
}
|
||||
return rval;
|
||||
}
|
||||
|
@ -59,6 +59,7 @@ MariaDBMonitor::MariaDBMonitor(MXS_MONITOR* monitor_base)
|
||||
, m_master_gtid_domain(-1)
|
||||
, m_external_master_port(PORT_UNKNOWN)
|
||||
, m_warn_set_standalone_master(true)
|
||||
, m_checked(false)
|
||||
{}
|
||||
|
||||
MariaDBMonitor::~MariaDBMonitor()
|
||||
@ -128,7 +129,25 @@ bool MariaDBMonitor::set_replication_credentials(const MXS_CONFIG_PARAMETER* par
|
||||
return rval;
|
||||
}
|
||||
|
||||
MariaDBMonitor* MariaDBMonitor::start(MXS_MONITOR *monitor, const MXS_CONFIG_PARAMETER* params)
|
||||
MariaDBMonitor* MariaDBMonitor::create(MXS_MONITOR *monitor, const MXS_CONFIG_PARAMETER* params)
|
||||
{
|
||||
MariaDBMonitor *handle = new MariaDBMonitor(monitor);
|
||||
|
||||
if (check_monitor_permissions(monitor, "SHOW SLAVE STATUS"))
|
||||
{
|
||||
handle->m_checked = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
handle->m_checked = false;
|
||||
MXS_ERROR("Monitor cannot access servers. Starting the monitor will fail "
|
||||
"unless problem was temporary or is addressed");
|
||||
}
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
||||
MariaDBMonitor* MariaDBMonitor::create_and_start(MXS_MONITOR *monitor, const MXS_CONFIG_PARAMETER* params)
|
||||
{
|
||||
bool error = false;
|
||||
MariaDBMonitor *handle = static_cast<MariaDBMonitor*>(monitor->handle);
|
||||
@ -171,6 +190,11 @@ MariaDBMonitor* MariaDBMonitor::start(MXS_MONITOR *monitor, const MXS_CONFIG_PAR
|
||||
return handle;
|
||||
}
|
||||
|
||||
void MariaDBMonitor::destroy(MariaDBMonitor* monitor)
|
||||
{
|
||||
delete monitor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load config parameters
|
||||
*
|
||||
@ -904,16 +928,15 @@ bool MariaDBMonitor::check_sql_files()
|
||||
return rval;
|
||||
}
|
||||
|
||||
static MXS_SPECIFIC_MONITOR* initMonitor(MXS_MONITOR *monitor,
|
||||
const MXS_CONFIG_PARAMETER* params)
|
||||
static MXS_SPECIFIC_MONITOR* createInstance(MXS_MONITOR *monitor,
|
||||
const MXS_CONFIG_PARAMETER* params)
|
||||
{
|
||||
ss_dassert(!true);
|
||||
return NULL;
|
||||
return MariaDBMonitor::create(monitor, params);
|
||||
}
|
||||
|
||||
static void finishMonitor(MXS_SPECIFIC_MONITOR* monitor)
|
||||
static void destroyInstance(MXS_SPECIFIC_MONITOR* monitor)
|
||||
{
|
||||
ss_dassert(!true);
|
||||
MariaDBMonitor::destroy(static_cast<MariaDBMonitor*>(monitor));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -927,7 +950,7 @@ static void finishMonitor(MXS_SPECIFIC_MONITOR* monitor)
|
||||
static MXS_SPECIFIC_MONITOR* startMonitor(MXS_MONITOR *monitor,
|
||||
const MXS_CONFIG_PARAMETER* params)
|
||||
{
|
||||
return MariaDBMonitor::start(monitor, params);
|
||||
return MariaDBMonitor::create_and_start(monitor, params);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1133,8 +1156,8 @@ MXS_MODULE* MXS_CREATE_MODULE()
|
||||
|
||||
static MXS_MONITOR_OBJECT MyObject =
|
||||
{
|
||||
initMonitor,
|
||||
finishMonitor,
|
||||
createInstance,
|
||||
destroyInstance,
|
||||
startMonitor,
|
||||
stopMonitor,
|
||||
diagnostics,
|
||||
|
@ -62,6 +62,15 @@ public:
|
||||
*/
|
||||
void main_loop();
|
||||
|
||||
/**
|
||||
* Create the monitor instance and return the instance data.
|
||||
*
|
||||
* @param monitor General monitor data
|
||||
* @param params Configuration parameters
|
||||
* @return A pointer to MariaDBMonitor specific data.
|
||||
*/
|
||||
static MariaDBMonitor* create(MXS_MONITOR *monitor, const MXS_CONFIG_PARAMETER* params);
|
||||
|
||||
/**
|
||||
* Start the monitor instance and return the instance data, creating it if starting for the first time.
|
||||
* This function creates a thread to execute the monitoring.
|
||||
@ -70,7 +79,14 @@ public:
|
||||
* @param params Configuration parameters
|
||||
* @return A pointer to MariaDBMonitor specific data.
|
||||
*/
|
||||
static MariaDBMonitor* start(MXS_MONITOR *monitor, const MXS_CONFIG_PARAMETER* params);
|
||||
static MariaDBMonitor* create_and_start(MXS_MONITOR *monitor, const MXS_CONFIG_PARAMETER* params);
|
||||
|
||||
/**
|
||||
* Destroyes aka deletes the instance.
|
||||
*
|
||||
* @param monitor The instance to be finished.
|
||||
*/
|
||||
static void destroy(MariaDBMonitor* monitor);
|
||||
|
||||
/**
|
||||
* Stop the monitor. Waits until monitor has stopped.
|
||||
@ -149,6 +165,7 @@ private:
|
||||
std::string m_script; /**< Script to call when state changes occur on servers */
|
||||
uint64_t m_events; /**< enabled events */
|
||||
bool m_warn_set_standalone_master; /**< Log a warning when setting standalone master */
|
||||
bool m_checked; /**< Whether access to servers has been checked */
|
||||
|
||||
enum slave_down_setting_t
|
||||
{
|
||||
|
Reference in New Issue
Block a user