diff --git a/server/core/config_runtime.cc b/server/core/config_runtime.cc index 074c71057..33844b3e2 100644 --- a/server/core/config_runtime.cc +++ b/server/core/config_runtime.cc @@ -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 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; }