Cleanup monitor stop/start during runtime modification

The stop/start between different callers of do_alter_monitor was
confusing.
This commit is contained in:
Esa Korhonen
2018-10-17 17:34:20 +03:00
parent fe3900be0e
commit b05385e0ac

View File

@ -552,8 +552,9 @@ bool validate_param(const MXS_MODULE_PARAM* basic,
return rval;
}
bool do_alter_monitor(MXS_MONITOR* monitor, const char* key, const char* value, bool restart_monitor)
bool do_alter_monitor(MXS_MONITOR* monitor, const char* key, const char* value)
{
mxb_assert(monitor->state == MONITOR_STATE_STOPPED);
const MXS_MODULE* mod = get_module(monitor->module_name, MODULE_MONITOR);
if (!validate_param(config_monitor_params, mod->parameters, key, value))
@ -568,12 +569,7 @@ bool do_alter_monitor(MXS_MONITOR* monitor, const char* key, const char* value,
std::lock_guard<std::mutex> guard(crt_lock);
if (restart_monitor)
{
monitor_stop(monitor);
}
monitor_set_parameter(monitor, key, value);
bool success = true;
if (strcmp(key, CN_USER) == 0)
{
@ -654,11 +650,6 @@ bool do_alter_monitor(MXS_MONITOR* monitor, const char* key, const char* value,
mxb_assert(config_param_is_valid(mod->parameters, key, value, NULL));
}
if (restart_monitor)
{
monitor_serialize(monitor);
monitor_start(monitor, monitor->parameters);
}
if (success)
{
MXS_NOTICE("Updated monitor '%s': %s=%s", monitor->name, key, value);
@ -668,7 +659,22 @@ bool do_alter_monitor(MXS_MONITOR* monitor, const char* key, const char* value,
bool runtime_alter_monitor(MXS_MONITOR* monitor, const char* key, const char* value)
{
return do_alter_monitor(monitor, key, value, true);
// If the monitor is already stopped, don't stop/start it.
bool was_running = (monitor->state == MONITOR_STATE_RUNNING);
if (was_running)
{
monitor_stop(monitor);
}
bool success = do_alter_monitor(monitor, key, value);
if (success)
{
monitor_serialize(monitor);
}
if (was_running)
{
monitor_start(monitor, monitor->parameters);
}
return success;
}
bool runtime_alter_service(Service* service, const char* zKey, const char* zValue)
@ -2308,7 +2314,7 @@ bool runtime_alter_monitor_from_json(MXS_MONITOR* monitor, json_t* new_json)
{
/** No change in values */
}
else if (do_alter_monitor(monitor, key, mxs::json_to_string(value).c_str(), false))
else if (do_alter_monitor(monitor, key, mxs::json_to_string(value).c_str()))
{
changed = true;
}