From adb7f156d6c9e212059814fdf34b62945a20117e Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Wed, 16 May 2018 12:30:37 +0300 Subject: [PATCH] MXS-1775 Introduce MonitorInstance::has_sufficient_permissions() With this function in place, it is now possible to move the thread starting to MonitorInstance. --- include/maxscale/monitor.hh | 1 + server/core/monitor.cc | 5 +++++ server/modules/monitor/auroramon/auroramon.cc | 11 ++++++++--- server/modules/monitor/auroramon/auroramon.hh | 1 + server/modules/monitor/galeramon/galeramon.cc | 7 ++++++- server/modules/monitor/galeramon/galeramon.hh | 5 +++-- server/modules/monitor/grmon/grmon.cc | 14 +++++++++++++- server/modules/monitor/grmon/grmon.hh | 1 + server/modules/monitor/mmmon/mmmon.cc | 7 ++++++- server/modules/monitor/mmmon/mmmon.hh | 1 + .../modules/monitor/ndbclustermon/ndbclustermon.cc | 7 ++++++- .../modules/monitor/ndbclustermon/ndbclustermon.hh | 1 + 12 files changed, 52 insertions(+), 9 deletions(-) diff --git a/include/maxscale/monitor.hh b/include/maxscale/monitor.hh index 6d9d7b229..7ddc9503f 100644 --- a/include/maxscale/monitor.hh +++ b/include/maxscale/monitor.hh @@ -32,6 +32,7 @@ public: protected: MonitorInstance(MXS_MONITOR* pMonitor); + virtual bool has_sufficient_permissions() const; virtual void configure(const MXS_CONFIG_PARAMETER* pParams); virtual void main() = 0; diff --git a/server/core/monitor.cc b/server/core/monitor.cc index fadc75914..a543eb04b 100644 --- a/server/core/monitor.cc +++ b/server/core/monitor.cc @@ -2535,6 +2535,11 @@ void MonitorInstance::stop() m_script = NULL; } +bool MonitorInstance::has_sufficient_permissions() const +{ + return true; +} + void MonitorInstance::configure(const MXS_CONFIG_PARAMETER* pParams) { } diff --git a/server/modules/monitor/auroramon/auroramon.cc b/server/modules/monitor/auroramon/auroramon.cc index ea83b3407..2c0ec29fe 100644 --- a/server/modules/monitor/auroramon/auroramon.cc +++ b/server/modules/monitor/auroramon/auroramon.cc @@ -191,9 +191,7 @@ bool AuroraMonitor::start(const MXS_CONFIG_PARAMETER *params) if (!m_checked) { - if (!check_monitor_permissions(m_monitor, "SELECT @@aurora_server_id, server_id FROM " - "information_schema.replica_host_status " - "WHERE session_id = 'MASTER_SESSION_ID'")) + if (!has_sufficient_permissions()) { MXS_ERROR("Failed to start monitor. See earlier errors for more information."); } @@ -222,6 +220,13 @@ bool AuroraMonitor::start(const MXS_CONFIG_PARAMETER *params) return started; } +bool AuroraMonitor::has_sufficient_permissions() const +{ + return check_monitor_permissions(m_monitor, "SELECT @@aurora_server_id, server_id FROM " + "information_schema.replica_host_status " + "WHERE session_id = 'MASTER_SESSION_ID'"); +} + void AuroraMonitor::configure(const MXS_CONFIG_PARAMETER* params) { m_script = config_copy_string(params, "script"); diff --git a/server/modules/monitor/auroramon/auroramon.hh b/server/modules/monitor/auroramon/auroramon.hh index 1411e476a..c56e1d334 100644 --- a/server/modules/monitor/auroramon/auroramon.hh +++ b/server/modules/monitor/auroramon/auroramon.hh @@ -36,6 +36,7 @@ private: AuroraMonitor(MXS_MONITOR* monitor); ~AuroraMonitor(); + bool has_sufficient_permissions() const; 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 ae9f995be..0966241a0 100644 --- a/server/modules/monitor/galeramon/galeramon.cc +++ b/server/modules/monitor/galeramon/galeramon.cc @@ -165,7 +165,7 @@ bool GaleraMonitor::start(const MXS_CONFIG_PARAMETER *params) if (!m_checked) { - if (!check_monitor_permissions(m_monitor, "SHOW STATUS LIKE 'wsrep_local_state'")) + if (!has_sufficient_permissions()) { MXS_ERROR("Failed to start monitor. See earlier errors for more information."); } @@ -194,6 +194,11 @@ bool GaleraMonitor::start(const MXS_CONFIG_PARAMETER *params) return started; } +bool GaleraMonitor::has_sufficient_permissions() const +{ + return check_monitor_permissions(m_monitor, "SHOW STATUS LIKE 'wsrep_local_state'"); +} + void GaleraMonitor::configure(const MXS_CONFIG_PARAMETER* params) { m_disableMasterFailback = config_get_bool(params, "disable_master_failback"); diff --git a/server/modules/monitor/galeramon/galeramon.hh b/server/modules/monitor/galeramon/galeramon.hh index dd9779075..7e21fe380 100644 --- a/server/modules/monitor/galeramon/galeramon.hh +++ b/server/modules/monitor/galeramon/galeramon.hh @@ -81,8 +81,6 @@ 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); @@ -93,5 +91,8 @@ private: void set_galera_cluster(); void update_sst_donor_nodes(int is_cluster); + bool has_sufficient_permissions() const; + void configure(const MXS_CONFIG_PARAMETER* param); + void main(); }; diff --git a/server/modules/monitor/grmon/grmon.cc b/server/modules/monitor/grmon/grmon.cc index 5d364fc0a..523bd3cee 100644 --- a/server/modules/monitor/grmon/grmon.cc +++ b/server/modules/monitor/grmon/grmon.cc @@ -56,7 +56,14 @@ bool GRMon::start(const MXS_CONFIG_PARAMETER* params) if (!m_checked) { - m_checked = true; + if (!has_sufficient_permissions()) + { + MXS_ERROR("Failed to start monitor. See earlier errors for more information."); + } + else + { + m_checked = true; + } } if (m_checked) @@ -76,6 +83,11 @@ bool GRMon::start(const MXS_CONFIG_PARAMETER* params) return started; } +bool GRMon::has_sufficient_permissions() const +{ + return true; +} + void GRMon::configure(const MXS_CONFIG_PARAMETER* params) { m_script = config_get_string(params, "script"); diff --git a/server/modules/monitor/grmon/grmon.hh b/server/modules/monitor/grmon/grmon.hh index 43fa1e669..04fdb0b25 100644 --- a/server/modules/monitor/grmon/grmon.hh +++ b/server/modules/monitor/grmon/grmon.hh @@ -39,6 +39,7 @@ private: GRMon(MXS_MONITOR* monitor); ~GRMon(); + bool has_sufficient_permissions() const; 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 367d985ec..68c74c77e 100644 --- a/server/modules/monitor/mmmon/mmmon.cc +++ b/server/modules/monitor/mmmon/mmmon.cc @@ -127,7 +127,7 @@ bool MMMonitor::start(const MXS_CONFIG_PARAMETER *params) if (!m_checked) { - if (!check_monitor_permissions(m_monitor, "SHOW SLAVE STATUS")) + if (!has_sufficient_permissions()) { MXS_ERROR("Failed to start monitor. See earlier errors for more information."); } @@ -156,6 +156,11 @@ bool MMMonitor::start(const MXS_CONFIG_PARAMETER *params) return started; } +bool MMMonitor::has_sufficient_permissions() const +{ + return check_monitor_permissions(m_monitor, "SHOW SLAVE STATUS"); +} + void MMMonitor::configure(const MXS_CONFIG_PARAMETER* params) { m_script = config_copy_string(params, "script"); diff --git a/server/modules/monitor/mmmon/mmmon.hh b/server/modules/monitor/mmmon/mmmon.hh index a44590a23..f0a0e724d 100644 --- a/server/modules/monitor/mmmon/mmmon.hh +++ b/server/modules/monitor/mmmon/mmmon.hh @@ -42,6 +42,7 @@ private: MXS_MONITORED_SERVER *get_current_master(); + bool has_sufficient_permissions() const; 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 e96b48cf1..7e48a99e2 100644 --- a/server/modules/monitor/ndbclustermon/ndbclustermon.cc +++ b/server/modules/monitor/ndbclustermon/ndbclustermon.cc @@ -111,7 +111,7 @@ bool NDBCMonitor::start(const MXS_CONFIG_PARAMETER *params) if (!m_checked) { - if (!check_monitor_permissions(m_monitor, "SHOW STATUS LIKE 'Ndb_number_of_ready_data_nodes'")) + if (!has_sufficient_permissions()) { MXS_ERROR("Failed to start monitor. See earlier errors for more information."); } @@ -140,6 +140,11 @@ bool NDBCMonitor::start(const MXS_CONFIG_PARAMETER *params) return started; } +bool NDBCMonitor::has_sufficient_permissions() const +{ + return check_monitor_permissions(m_monitor, "SHOW STATUS LIKE 'Ndb_number_of_ready_data_nodes'"); +} + void NDBCMonitor::configure(const MXS_CONFIG_PARAMETER* params) { m_script = config_copy_string(params, "script"); diff --git a/server/modules/monitor/ndbclustermon/ndbclustermon.hh b/server/modules/monitor/ndbclustermon/ndbclustermon.hh index 9c0b3cc91..be0204cc0 100644 --- a/server/modules/monitor/ndbclustermon/ndbclustermon.hh +++ b/server/modules/monitor/ndbclustermon/ndbclustermon.hh @@ -39,6 +39,7 @@ private: NDBCMonitor(MXS_MONITOR* monitor); ~NDBCMonitor(); + bool has_sufficient_permissions() const; void configure(const MXS_CONFIG_PARAMETER* params); void main();