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:
Markus Mäkelä 2019-03-21 14:20:37 +02:00
parent 203bba0e1d
commit 40df519be4
No known key found for this signature in database
GPG Key ID: 72D48FCE664F7B19
3 changed files with 13 additions and 43 deletions

View File

@ -1234,14 +1234,9 @@ bool runtime_create_monitor(const char* name, const char* module, MXS_CONFIG_PAR
if (MonitorManager::find_monitor(name) == NULL)
{
Monitor* monitor = MonitorManager::reactivate_monitor(name, module);
std::string reason;
if (monitor)
{
MXS_DEBUG("Repurposed monitor '%s'", name);
}
else if (config_is_valid_name(name, &reason))
if (config_is_valid_name(name, &reason))
{
MXS_CONFIG_PARAMETER final_params;
bool ok;
@ -1254,29 +1249,27 @@ bool runtime_create_monitor(const char* name, const char* module, MXS_CONFIG_PAR
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);
}
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
{
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
{

View File

@ -132,8 +132,6 @@ public:
*/
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 monitor_show(DCB* dcb, mxs::Monitor* monitor);

View File

@ -680,27 +680,6 @@ Monitor* MonitorManager::find_monitor(const char* name)
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
*