From 3606a5ed1cfbca4a4e28df7fc84acdeef249b25d Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Wed, 16 May 2018 11:35:24 +0300 Subject: [PATCH] MXS-1775 Introduce MonitorInstance::configure() function The configuring of the monitor instance is now performed in a separate function. That is in preparation for the moving of the start function to maxscale::MonitorInstance. --- include/maxscale/monitor.hh | 2 ++ server/core/monitor.cc | 4 +++ server/modules/monitor/auroramon/auroramon.cc | 13 ++++++-- server/modules/monitor/auroramon/auroramon.hh | 2 ++ server/modules/monitor/galeramon/galeramon.cc | 29 ++++++++++------- server/modules/monitor/galeramon/galeramon.hh | 2 ++ server/modules/monitor/grmon/grmon.cc | 32 +++++++++++++++---- server/modules/monitor/grmon/grmon.hh | 2 ++ server/modules/monitor/mmmon/mmmon.cc | 15 +++++++-- server/modules/monitor/mmmon/mmmon.hh | 2 ++ .../monitor/ndbclustermon/ndbclustermon.cc | 13 ++++++-- .../monitor/ndbclustermon/ndbclustermon.hh | 2 ++ 12 files changed, 93 insertions(+), 25 deletions(-) diff --git a/include/maxscale/monitor.hh b/include/maxscale/monitor.hh index 07d54bd9a..6d9d7b229 100644 --- a/include/maxscale/monitor.hh +++ b/include/maxscale/monitor.hh @@ -32,6 +32,8 @@ public: protected: MonitorInstance(MXS_MONITOR* pMonitor); + virtual void configure(const MXS_CONFIG_PARAMETER* pParams); + virtual void main() = 0; static void main(void* pArg); diff --git a/server/core/monitor.cc b/server/core/monitor.cc index d5c129187..fadc75914 100644 --- a/server/core/monitor.cc +++ b/server/core/monitor.cc @@ -2535,6 +2535,10 @@ void MonitorInstance::stop() m_script = NULL; } +void MonitorInstance::configure(const MXS_CONFIG_PARAMETER* pParams) +{ +} + //static void MonitorInstance::main(void* pArg) { diff --git a/server/modules/monitor/auroramon/auroramon.cc b/server/modules/monitor/auroramon/auroramon.cc index 586fe5c1f..ea83b3407 100644 --- a/server/modules/monitor/auroramon/auroramon.cc +++ b/server/modules/monitor/auroramon/auroramon.cc @@ -185,6 +185,10 @@ bool AuroraMonitor::start(const MXS_CONFIG_PARAMETER *params) { bool started = false; + ss_dassert(!m_shutdown); + ss_dassert(!m_thread); + ss_dassert(!m_script); + if (!m_checked) { if (!check_monitor_permissions(m_monitor, "SELECT @@aurora_server_id, server_id FROM " @@ -201,8 +205,7 @@ bool AuroraMonitor::start(const MXS_CONFIG_PARAMETER *params) if (m_checked) { - m_script = config_copy_string(params, "script"); - m_events = config_get_enum(params, "events", mxs_monitor_event_enum_values); + configure(params); if (thread_start(&m_thread, &maxscale::MonitorInstance::main, this, 0) == NULL) { @@ -219,6 +222,12 @@ bool AuroraMonitor::start(const MXS_CONFIG_PARAMETER *params) return started; } +void AuroraMonitor::configure(const MXS_CONFIG_PARAMETER* params) +{ + m_script = config_copy_string(params, "script"); + m_events = config_get_enum(params, "events", mxs_monitor_event_enum_values); +} + /** * Diagnostic interface * diff --git a/server/modules/monitor/auroramon/auroramon.hh b/server/modules/monitor/auroramon/auroramon.hh index bd7a5ec4c..1411e476a 100644 --- a/server/modules/monitor/auroramon/auroramon.hh +++ b/server/modules/monitor/auroramon/auroramon.hh @@ -36,5 +36,7 @@ private: AuroraMonitor(MXS_MONITOR* monitor); ~AuroraMonitor(); + void configure(const MXS_CONFIG_PARAMETER* params); + void main(); }; diff --git a/server/modules/monitor/galeramon/galeramon.cc b/server/modules/monitor/galeramon/galeramon.cc index 35f8fe030..ae9f995be 100644 --- a/server/modules/monitor/galeramon/galeramon.cc +++ b/server/modules/monitor/galeramon/galeramon.cc @@ -177,21 +177,13 @@ bool GaleraMonitor::start(const MXS_CONFIG_PARAMETER *params) if (m_checked) { - m_disableMasterFailback = config_get_bool(params, "disable_master_failback"); - m_availableWhenDonor = config_get_bool(params, "available_when_donor"); - m_disableMasterRoleSetting = config_get_bool(params, "disable_master_role_setting"); - m_root_node_as_master = config_get_bool(params, "root_node_as_master"); - m_use_priority = config_get_bool(params, "use_priority"); - m_script = config_copy_string(params, "script"); - m_events = config_get_enum(params, "events", mxs_monitor_event_enum_values); - m_set_donor_nodes = config_get_bool(params, "set_donor_nodes"); - - /* Reset all data in the hashtable */ - reset_cluster_info(); + configure(params); if (thread_start(&m_thread, &maxscale::MonitorInstance::main, this, 0) == NULL) { MXS_ERROR("Failed to start monitor thread for monitor '%s'.", m_monitor->name); + MXS_FREE(m_script); + m_script = NULL; } else { @@ -202,6 +194,21 @@ bool GaleraMonitor::start(const MXS_CONFIG_PARAMETER *params) return started; } +void GaleraMonitor::configure(const MXS_CONFIG_PARAMETER* params) +{ + m_disableMasterFailback = config_get_bool(params, "disable_master_failback"); + m_availableWhenDonor = config_get_bool(params, "available_when_donor"); + m_disableMasterRoleSetting = config_get_bool(params, "disable_master_role_setting"); + m_root_node_as_master = config_get_bool(params, "root_node_as_master"); + m_use_priority = config_get_bool(params, "use_priority"); + m_script = config_copy_string(params, "script"); + m_events = config_get_enum(params, "events", mxs_monitor_event_enum_values); + m_set_donor_nodes = config_get_bool(params, "set_donor_nodes"); + + /* Reset all data in the hashtable */ + reset_cluster_info(); +} + /** * Diagnostic interface * diff --git a/server/modules/monitor/galeramon/galeramon.hh b/server/modules/monitor/galeramon/galeramon.hh index 8968bc969..dd9779075 100644 --- a/server/modules/monitor/galeramon/galeramon.hh +++ b/server/modules/monitor/galeramon/galeramon.hh @@ -81,6 +81,8 @@ private: GaleraMonitor(MXS_MONITOR* monitor); ~GaleraMonitor(); + void configure(const MXS_CONFIG_PARAMETER* param); + bool detect_cluster_size(const int n_nodes, const char *candidate_uuid, const int candidate_size); diff --git a/server/modules/monitor/grmon/grmon.cc b/server/modules/monitor/grmon/grmon.cc index d506e9cd3..5d364fc0a 100644 --- a/server/modules/monitor/grmon/grmon.cc +++ b/server/modules/monitor/grmon/grmon.cc @@ -51,20 +51,38 @@ bool GRMon::start(const MXS_CONFIG_PARAMETER* params) { bool started = false; - m_shutdown = 0; - m_master = NULL; - m_script = config_get_string(params, "script"); - m_events = config_get_enum(params, "events", mxs_monitor_event_enum_values); - m_thread = 0; + ss_dassert(!m_shutdown); + ss_dassert(!m_thread); - if (thread_start(&m_thread, &maxscale::MonitorInstance::main, this, 0) != NULL) + if (!m_checked) { - started = true; + m_checked = true; + } + + if (m_checked) + { + configure(params); + + if (thread_start(&m_thread, &maxscale::MonitorInstance::main, this, 0) == NULL) + { + ; + } + else + { + started = true; + } } return started; } +void GRMon::configure(const MXS_CONFIG_PARAMETER* params) +{ + m_script = config_get_string(params, "script"); + m_events = config_get_enum(params, "events", mxs_monitor_event_enum_values); + m_master = NULL; +} + void GRMon::diagnostics(DCB* dcb) const { } diff --git a/server/modules/monitor/grmon/grmon.hh b/server/modules/monitor/grmon/grmon.hh index 0b506c582..43fa1e669 100644 --- a/server/modules/monitor/grmon/grmon.hh +++ b/server/modules/monitor/grmon/grmon.hh @@ -39,5 +39,7 @@ private: GRMon(MXS_MONITOR* monitor); ~GRMon(); + void configure(const MXS_CONFIG_PARAMETER* params); + void main(); }; diff --git a/server/modules/monitor/mmmon/mmmon.cc b/server/modules/monitor/mmmon/mmmon.cc index 81b31070a..367d985ec 100644 --- a/server/modules/monitor/mmmon/mmmon.cc +++ b/server/modules/monitor/mmmon/mmmon.cc @@ -121,6 +121,10 @@ bool MMMonitor::start(const MXS_CONFIG_PARAMETER *params) { bool started = false; + ss_dassert(!m_shutdown); + ss_dassert(!m_thread); + ss_dassert(!m_script); + if (!m_checked) { if (!check_monitor_permissions(m_monitor, "SHOW SLAVE STATUS")) @@ -135,9 +139,7 @@ bool MMMonitor::start(const MXS_CONFIG_PARAMETER *params) if (m_checked) { - m_detectStaleMaster = config_get_bool(params, "detect_stale_master"); - m_script = config_copy_string(params, "script"); - m_events = config_get_enum(params, "events", mxs_monitor_event_enum_values); + configure(params); if (thread_start(&m_thread, &maxscale::MonitorInstance::main, this, 0) == NULL) { @@ -154,6 +156,13 @@ bool MMMonitor::start(const MXS_CONFIG_PARAMETER *params) return started; } +void MMMonitor::configure(const MXS_CONFIG_PARAMETER* params) +{ + m_script = config_copy_string(params, "script"); + m_events = config_get_enum(params, "events", mxs_monitor_event_enum_values); + m_detectStaleMaster = config_get_bool(params, "detect_stale_master"); +} + /** * Diagnostic interface * diff --git a/server/modules/monitor/mmmon/mmmon.hh b/server/modules/monitor/mmmon/mmmon.hh index 623b9af58..a44590a23 100644 --- a/server/modules/monitor/mmmon/mmmon.hh +++ b/server/modules/monitor/mmmon/mmmon.hh @@ -42,5 +42,7 @@ private: MXS_MONITORED_SERVER *get_current_master(); + void configure(const MXS_CONFIG_PARAMETER* params); + void main(); }; diff --git a/server/modules/monitor/ndbclustermon/ndbclustermon.cc b/server/modules/monitor/ndbclustermon/ndbclustermon.cc index 2e61c2571..e96b48cf1 100644 --- a/server/modules/monitor/ndbclustermon/ndbclustermon.cc +++ b/server/modules/monitor/ndbclustermon/ndbclustermon.cc @@ -105,6 +105,10 @@ bool NDBCMonitor::start(const MXS_CONFIG_PARAMETER *params) { bool started = false; + ss_dassert(!m_shutdown); + ss_dassert(!m_thread); + ss_dassert(!m_script); + if (!m_checked) { if (!check_monitor_permissions(m_monitor, "SHOW STATUS LIKE 'Ndb_number_of_ready_data_nodes'")) @@ -119,8 +123,7 @@ bool NDBCMonitor::start(const MXS_CONFIG_PARAMETER *params) if (m_checked) { - m_script = config_copy_string(params, "script"); - m_events = config_get_enum(params, "events", mxs_monitor_event_enum_values); + configure(params); if (thread_start(&m_thread, &maxscale::MonitorInstance::main, this, 0) == NULL) { @@ -137,6 +140,12 @@ bool NDBCMonitor::start(const MXS_CONFIG_PARAMETER *params) return started; } +void NDBCMonitor::configure(const MXS_CONFIG_PARAMETER* params) +{ + m_script = config_copy_string(params, "script"); + m_events = config_get_enum(params, "events", mxs_monitor_event_enum_values); +} + /** * Diagnostic interface * diff --git a/server/modules/monitor/ndbclustermon/ndbclustermon.hh b/server/modules/monitor/ndbclustermon/ndbclustermon.hh index d47d92293..9c0b3cc91 100644 --- a/server/modules/monitor/ndbclustermon/ndbclustermon.hh +++ b/server/modules/monitor/ndbclustermon/ndbclustermon.hh @@ -39,5 +39,7 @@ private: NDBCMonitor(MXS_MONITOR* monitor); ~NDBCMonitor(); + void configure(const MXS_CONFIG_PARAMETER* params); + void main(); };