Never reactivate monitors
Reactivating monitors shouldn't be done as it's simpler to actually destroy and create a new one. The performance of reactivation is insignificant compared to the possible inconsistency problems it allows.
This commit is contained in:
@ -1234,14 +1234,9 @@ bool runtime_create_monitor(const char* name, const char* module, MXS_CONFIG_PAR
|
|||||||
|
|
||||||
if (MonitorManager::find_monitor(name) == NULL)
|
if (MonitorManager::find_monitor(name) == NULL)
|
||||||
{
|
{
|
||||||
Monitor* monitor = MonitorManager::reactivate_monitor(name, module);
|
|
||||||
std::string reason;
|
std::string reason;
|
||||||
|
|
||||||
if (monitor)
|
if (config_is_valid_name(name, &reason))
|
||||||
{
|
|
||||||
MXS_DEBUG("Repurposed monitor '%s'", name);
|
|
||||||
}
|
|
||||||
else if (config_is_valid_name(name, &reason))
|
|
||||||
{
|
{
|
||||||
MXS_CONFIG_PARAMETER final_params;
|
MXS_CONFIG_PARAMETER final_params;
|
||||||
bool ok;
|
bool ok;
|
||||||
@ -1254,29 +1249,27 @@ bool runtime_create_monitor(const char* name, const char* module, MXS_CONFIG_PAR
|
|||||||
final_params.set_multiple(*params);
|
final_params.set_multiple(*params);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((monitor = MonitorManager::create_monitor(name, module, &final_params)) == NULL)
|
Monitor* monitor = MonitorManager::create_monitor(name, module, &final_params);
|
||||||
|
|
||||||
|
if (!monitor)
|
||||||
{
|
{
|
||||||
config_runtime_error("Could not create monitor '%s' with module '%s'", name, module);
|
config_runtime_error("Could not create monitor '%s' with module '%s'", name, module);
|
||||||
}
|
}
|
||||||
|
else if (!MonitorManager::monitor_serialize(monitor))
|
||||||
|
{
|
||||||
|
config_runtime_error("Failed to serialize monitor '%s'", name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MXS_NOTICE("Created monitor '%s'", name);
|
||||||
|
rval = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
config_runtime_error("%s", reason.c_str());
|
config_runtime_error("%s", reason.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (monitor)
|
|
||||||
{
|
|
||||||
if (MonitorManager::monitor_serialize(monitor))
|
|
||||||
{
|
|
||||||
MXS_NOTICE("Created monitor '%s'", name);
|
|
||||||
rval = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
config_runtime_error("Failed to serialize monitor '%s'", name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -132,8 +132,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
static mxs::Monitor* server_is_monitored(const SERVER* server);
|
static mxs::Monitor* server_is_monitored(const SERVER* server);
|
||||||
|
|
||||||
static mxs::Monitor* reactivate_monitor(const char* name, const char* module);
|
|
||||||
|
|
||||||
static void show_all_monitors(DCB* dcb);
|
static void show_all_monitors(DCB* dcb);
|
||||||
static void monitor_show(DCB* dcb, mxs::Monitor* monitor);
|
static void monitor_show(DCB* dcb, mxs::Monitor* monitor);
|
||||||
|
|
||||||
|
@ -680,27 +680,6 @@ Monitor* MonitorManager::find_monitor(const char* name)
|
|||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Find a destroyed monitor by name
|
|
||||||
*
|
|
||||||
* @param name The name of the monitor
|
|
||||||
* @return Pointer to the destroyed monitor or NULL if monitor is not found
|
|
||||||
*/
|
|
||||||
Monitor* MonitorManager::reactivate_monitor(const char* name, const char* module)
|
|
||||||
{
|
|
||||||
Monitor* rval = NULL;
|
|
||||||
this_unit.foreach_monitor([&rval, name, module](Monitor* monitor) {
|
|
||||||
if (strcmp(monitor->m_name, name) == 0 && (monitor->m_module == module))
|
|
||||||
{
|
|
||||||
mxb_assert(!monitor->m_active);
|
|
||||||
monitor->m_active = true;
|
|
||||||
rval = monitor;
|
|
||||||
}
|
|
||||||
return (rval == nullptr);
|
|
||||||
});
|
|
||||||
return rval;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a resultset that has the current set of monitors in it
|
* Return a resultset that has the current set of monitors in it
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user