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; 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); const MXS_MODULE* mod = get_module(monitor->module_name, MODULE_MONITOR);
if (!validate_param(config_monitor_params, mod->parameters, key, value)) 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); std::lock_guard<std::mutex> guard(crt_lock);
if (restart_monitor)
{
monitor_stop(monitor);
}
monitor_set_parameter(monitor, key, value); monitor_set_parameter(monitor, key, value);
bool success = true; bool success = true;
if (strcmp(key, CN_USER) == 0) 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)); mxb_assert(config_param_is_valid(mod->parameters, key, value, NULL));
} }
if (restart_monitor)
{
monitor_serialize(monitor);
monitor_start(monitor, monitor->parameters);
}
if (success) if (success)
{ {
MXS_NOTICE("Updated monitor '%s': %s=%s", monitor->name, key, value); 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) 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) 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 */ /** 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; changed = true;
} }