Cleanup monitor stop/start during runtime modification
The stop/start between different callers of do_alter_monitor was confusing.
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user