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;
|
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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user