From 5a290cb0b8eb1278a1d886483ccbd010c05e9b42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Wed, 4 Jan 2017 11:54:30 +0200 Subject: [PATCH] Use module parameters in monitors All monitors now declare the parameters that they use. This allows the core to check the validity of the parameters before they are passed to the monitor. It also simplifies the processing of the parameters as they are guaranteed to be valid. --- server/core/config.c | 7 +- server/modules/monitor/galeramon/galeramon.c | 46 +++++-------- server/modules/monitor/mmmon/mmmon.c | 17 ++--- server/modules/monitor/mysqlmon.h | 2 - server/modules/monitor/mysqlmon/mysql_mon.c | 64 ++++++------------- .../monitor/ndbclustermon/ndbclustermon.c | 5 +- 6 files changed, 54 insertions(+), 87 deletions(-) diff --git a/server/core/config.c b/server/core/config.c index b72812b98..6bc9f04c9 100644 --- a/server/core/config.c +++ b/server/core/config.c @@ -1946,10 +1946,9 @@ check_config_objects(CONFIG_CONTEXT *context) } else if (!strcmp(type, "monitor")) { - // TODO: Declare monitor parameters - //param_set = monitor_params; - //module = config_get_value(obj->parameters, "module"); - //module_type = MODULE_MONITOR; + param_set = monitor_params; + module = config_get_value(obj->parameters, "module"); + module_type = MODULE_MONITOR; } else if (!strcmp(type, "filter")) { diff --git a/server/modules/monitor/galeramon/galeramon.c b/server/modules/monitor/galeramon/galeramon.c index 273d4f1a5..374c12915 100644 --- a/server/modules/monitor/galeramon/galeramon.c +++ b/server/modules/monitor/galeramon/galeramon.c @@ -77,7 +77,15 @@ MXS_MODULE* MXS_CREATE_MODULE() MONITOR_VERSION, "A Galera cluster monitor", "V2.0.0", - &MyObject + &MyObject, + { + {"disable_master_failback", MXS_MODULE_PARAM_BOOL, "false"}, + {"available_when_donor", MXS_MODULE_PARAM_BOOL, "false"}, + {"disable_master_role_setting", MXS_MODULE_PARAM_BOOL, "false"}, + {"root_node_as_master", MXS_MODULE_PARAM_BOOL, "true"}, + {"use_priority", MXS_MODULE_PARAM_BOOL, "false"}, + {MXS_END_MODULE_PARAMS} + } }; return &info; @@ -107,41 +115,21 @@ startMonitor(MONITOR *mon, const CONFIG_PARAMETER *params) } handle->shutdown = 0; handle->id = MONITOR_DEFAULT_ID; - handle->disableMasterFailback = 0; - handle->availableWhenDonor = 0; - handle->disableMasterRoleSetting = false; handle->master = NULL; handle->script = NULL; - handle->root_node_as_master = true; - handle->use_priority = false; memset(handle->events, false, sizeof(handle->events)); spinlock_init(&handle->lock); } + handle->disableMasterFailback = config_get_bool(params, "disable_master_failback"); + handle->availableWhenDonor = config_get_bool(params, "available_when_donor"); + handle->disableMasterRoleSetting = config_get_bool(params, "disable_master_role_setting"); + handle->root_node_as_master = config_get_bool(params, "root_node_as_master"); + handle->use_priority = config_get_bool(params, "use_priority"); while (params) { - if (!strcmp(params->name, "disable_master_failback")) - { - handle->disableMasterFailback = config_truth_value(params->value); - } - else if (!strcmp(params->name, "available_when_donor")) - { - handle->availableWhenDonor = config_truth_value(params->value); - } - else if (!strcmp(params->name, "disable_master_role_setting")) - { - handle->disableMasterRoleSetting = config_truth_value(params->value); - } - else if (!strcmp(params->name, "root_node_as_master")) - { - handle->root_node_as_master = config_truth_value(params->value); - } - else if (!strcmp(params->name, "use_priority")) - { - handle->use_priority = config_truth_value(params->value); - } - else if (!strcmp(params->name, "script")) + if (!strcmp(params->name, "script")) { if (externcmd_can_execute(params->value)) { @@ -450,8 +438,8 @@ monitorMain(void *arg) * round. */ if (nrounds != 0 && - (((nrounds * MON_BASE_INTERVAL_MS) % mon->interval) >= - MON_BASE_INTERVAL_MS) && (!mon->server_pending_changes)) + (((nrounds * MON_BASE_INTERVAL_MS) % mon->interval) >= + MON_BASE_INTERVAL_MS) && (!mon->server_pending_changes)) { nrounds += 1; continue; diff --git a/server/modules/monitor/mmmon/mmmon.c b/server/modules/monitor/mmmon/mmmon.c index bb44ee751..99d2ca004 100644 --- a/server/modules/monitor/mmmon/mmmon.c +++ b/server/modules/monitor/mmmon/mmmon.c @@ -78,7 +78,11 @@ MXS_MODULE* MXS_CREATE_MODULE() MONITOR_VERSION, "A Multi-Master Multi Master monitor", "V1.1.1", - &MyObject + &MyObject, + { + {"detect_stale_master", MXS_MODULE_PARAM_BOOL, "false"}, + {MXS_END_MODULE_PARAMS} + } }; return &info; @@ -113,18 +117,15 @@ startMonitor(MONITOR *mon, const CONFIG_PARAMETER *params) handle->id = MONITOR_DEFAULT_ID; handle->master = NULL; handle->script = NULL; - handle->detectStaleMaster = false; memset(handle->events, false, sizeof(handle->events)); spinlock_init(&handle->lock); } + handle->detectStaleMaster = config_get_bool(params, "detect_stale_master"); + while (params) { - if (!strcmp(params->name, "detect_stale_master")) - { - handle->detectStaleMaster = config_truth_value(params->value); - } - else if (!strcmp(params->name, "script")) + if (!strcmp(params->name, "script")) { if (externcmd_can_execute(params->value)) { @@ -536,7 +537,7 @@ monitorMain(void *arg) */ if (nrounds != 0 && (((nrounds * MON_BASE_INTERVAL_MS) % mon->interval) >= - MON_BASE_INTERVAL_MS) && (!mon->server_pending_changes)) + MON_BASE_INTERVAL_MS) && (!mon->server_pending_changes)) { nrounds += 1; continue; diff --git a/server/modules/monitor/mysqlmon.h b/server/modules/monitor/mysqlmon.h index 92fc3584b..753e9c367 100644 --- a/server/modules/monitor/mysqlmon.h +++ b/server/modules/monitor/mysqlmon.h @@ -53,8 +53,6 @@ MXS_BEGIN_DECLS -#define MYSQLMON_DEFAULT_FAILCOUNT 5 - /** * The handle for an instance of a MySQL Monitor module */ diff --git a/server/modules/monitor/mysqlmon/mysql_mon.c b/server/modules/monitor/mysqlmon/mysql_mon.c index 1dff9dd6f..22bc90b02 100644 --- a/server/modules/monitor/mysqlmon/mysql_mon.c +++ b/server/modules/monitor/mysqlmon/mysql_mon.c @@ -112,7 +112,17 @@ MXS_MODULE* MXS_CREATE_MODULE() MONITOR_VERSION, "A MySQL Master/Slave replication monitor", "V1.5.0", - &MyObject + &MyObject, + { + {"detect_replication_lag", MXS_MODULE_PARAM_BOOL, "false"}, + {"detect_stale_master", MXS_MODULE_PARAM_BOOL, "true"}, + {"detect_stale_slave", MXS_MODULE_PARAM_BOOL, "true"}, + {"mysql51_replication", MXS_MODULE_PARAM_BOOL, "false"}, + {"multimaster", MXS_MODULE_PARAM_BOOL, "false"}, + {"failover", MXS_MODULE_PARAM_BOOL, "false"}, + {"failcount", MXS_MODULE_PARAM_COUNT, "5"}, + {MXS_END_MODULE_PARAMS} + } }; return &info; @@ -238,14 +248,7 @@ startMonitor(MONITOR *monitor, const CONFIG_PARAMETER* params) handle->server_info = server_info; handle->shutdown = 0; handle->id = config_get_gateway_id(); - handle->replicationHeartbeat = 0; - handle->detectStaleMaster = true; - handle->detectStaleSlave = true; handle->script = NULL; - handle->multimaster = false; - handle->mysql51_replication = false; - handle->failover = false; - handle->failcount = MYSQLMON_DEFAULT_FAILCOUNT; handle->warn_failover = true; memset(handle->events, false, sizeof(handle->events)); spinlock_init(&handle->lock); @@ -254,38 +257,17 @@ startMonitor(MONITOR *monitor, const CONFIG_PARAMETER* params) /** This should always be reset to NULL */ handle->master = NULL; + handle->detectStaleMaster = config_get_bool(params, "detect_stale_master"); + handle->detectStaleSlave = config_get_bool(params, "detect_stale_slave"); + handle->replicationHeartbeat = config_get_bool(params, "detect_replication_lag"); + handle->multimaster = config_get_bool(params, "multimaster"); + handle->failover = config_get_bool(params, "failover"); + handle->failcount = config_get_integer(params, "failcount"); + handle->mysql51_replication = config_get_bool(params, "mysql51_replication"); + while (params) { - if (!strcmp(params->name, "detect_stale_master")) - { - handle->detectStaleMaster = config_truth_value(params->value); - } - else if (!strcmp(params->name, "detect_stale_slave")) - { - handle->detectStaleSlave = config_truth_value(params->value); - } - else if (!strcmp(params->name, "detect_replication_lag")) - { - handle->replicationHeartbeat = config_truth_value(params->value); - } - else if (!strcmp(params->name, "multimaster")) - { - handle->multimaster = config_truth_value(params->value); - } - else if (!strcmp(params->name, "failover")) - { - handle->failover = config_truth_value(params->value); - } - else if (!strcmp(params->name, "failcount")) - { - handle->failcount = atoi(params->value); - if (handle->failcount <= 0) - { - MXS_ERROR("[%s] Invalid value for 'failcount': %s", monitor->name, params->value); - error = true; - } - } - else if (!strcmp(params->name, "script")) + if (!strcmp(params->name, "script")) { if (externcmd_can_execute(params->value)) { @@ -308,10 +290,6 @@ startMonitor(MONITOR *monitor, const CONFIG_PARAMETER* params) have_events = true; } } - else if (!strcmp(params->name, "mysql51_replication")) - { - handle->mysql51_replication = config_truth_value(params->value); - } params = params->next; } @@ -1123,7 +1101,7 @@ monitorMain(void *arg) */ if (nrounds != 0 && (((nrounds * MON_BASE_INTERVAL_MS) % mon->interval) >= - MON_BASE_INTERVAL_MS) && (!mon->server_pending_changes)) + MON_BASE_INTERVAL_MS) && (!mon->server_pending_changes)) { nrounds += 1; continue; diff --git a/server/modules/monitor/ndbclustermon/ndbclustermon.c b/server/modules/monitor/ndbclustermon/ndbclustermon.c index f5c7e1878..a3f03664a 100644 --- a/server/modules/monitor/ndbclustermon/ndbclustermon.c +++ b/server/modules/monitor/ndbclustermon/ndbclustermon.c @@ -71,7 +71,10 @@ MXS_MODULE* MXS_CREATE_MODULE() MONITOR_VERSION, "A MySQL cluster SQL node monitor", "V2.1.0", - &MyObject + &MyObject, + { + {MXS_END_MODULE_PARAMS} // No parameters + } }; return &info;