diff --git a/include/maxscale/monitor.hh b/include/maxscale/monitor.hh index e96b0b1c3..806d50707 100644 --- a/include/maxscale/monitor.hh +++ b/include/maxscale/monitor.hh @@ -14,10 +14,31 @@ #include #include +#include namespace maxscale { +class MonitorInstance : public MXS_MONITOR_INSTANCE +{ +public: + MonitorInstance(const MonitorInstance&) = delete; + MonitorInstance& operator = (const MonitorInstance&) = delete; + + virtual ~MonitorInstance(); + +protected: + MonitorInstance(MXS_MONITOR* pMonitor); + + int m_status; /**< The current status of the monitor. */ + THREAD m_thread; /**< The thread handle of the monitoring thread. */ + MXS_MONITOR* m_monitor; /**< The generic monitor structure. */ + int32_t m_shutdown; /**< Non-zero if the monitor should shut down. */ + char* m_script; /**< Launchable script. */ + uint64_t m_events; /**< Enabled monitor events. */ + bool m_checked; /**< Whether server access has been checked. */ +}; + /** * The purpose of the template MonitorApi is to provide an implementation * of the monitor C-API. The template is instantiated with a class that diff --git a/server/core/monitor.cc b/server/core/monitor.cc index d10eb0147..2582fb524 100644 --- a/server/core/monitor.cc +++ b/server/core/monitor.cc @@ -14,7 +14,7 @@ /** * @file monitor.c - The monitor module management routines */ -#include +#include #include #include @@ -2502,3 +2502,24 @@ int mon_config_get_servers(const MXS_CONFIG_PARAMETER* params, const char* key, } return found; } + +namespace maxscale +{ + +MonitorInstance::MonitorInstance(MXS_MONITOR* pMonitor) + : m_status(0) + , m_thread(0) + , m_monitor(pMonitor) + , m_shutdown(0) + , m_script(NULL) + , m_events(0) +{ +} + +MonitorInstance::~MonitorInstance() +{ + ss_dassert(!m_thread); + ss_dassert(!m_script); +} + +} diff --git a/server/modules/monitor/auroramon/auroramon.cc b/server/modules/monitor/auroramon/auroramon.cc index fe75f9c9a..44c428c75 100644 --- a/server/modules/monitor/auroramon/auroramon.cc +++ b/server/modules/monitor/auroramon/auroramon.cc @@ -26,19 +26,12 @@ AuroraMonitor::AuroraMonitor(MXS_MONITOR* monitor) - : m_shutdown(false) - , m_thread(0) - , m_script(NULL) - , m_events(0) - , m_monitor(monitor) - , m_checked(false) + : maxscale::MonitorInstance(monitor) { } AuroraMonitor::~AuroraMonitor() { - ss_dassert(!m_thread); - ss_dassert(!m_script); } //static diff --git a/server/modules/monitor/auroramon/auroramon.hh b/server/modules/monitor/auroramon/auroramon.hh index 269dde0e2..b8fd808b0 100644 --- a/server/modules/monitor/auroramon/auroramon.hh +++ b/server/modules/monitor/auroramon/auroramon.hh @@ -20,7 +20,7 @@ * @file auroramon.hh - The Aurora monitor */ -class AuroraMonitor : public MXS_MONITOR_INSTANCE +class AuroraMonitor : public maxscale::MonitorInstance { public: AuroraMonitor(const AuroraMonitor&) = delete; @@ -34,13 +34,6 @@ public: json_t* diagnostics_json() const; private: - bool m_shutdown; /**< True if the monitor is stopped */ - THREAD m_thread; /**< Monitor thread */ - char* m_script; /**< Launchable script */ - uint64_t m_events; /**< Enabled monitor events */ - MXS_MONITOR* m_monitor; /**< Pointer to generic monitor structure */ - bool m_checked; /**< Whether server access has been checked */ - AuroraMonitor(MXS_MONITOR* monitor); ~AuroraMonitor(); diff --git a/server/modules/monitor/galeramon/galeramon.cc b/server/modules/monitor/galeramon/galeramon.cc index 69e8551f0..d96eccf07 100644 --- a/server/modules/monitor/galeramon/galeramon.cc +++ b/server/modules/monitor/galeramon/galeramon.cc @@ -100,22 +100,16 @@ extern "C" MXS_MODULE* MXS_CREATE_MODULE() GaleraMonitor::GaleraMonitor(MXS_MONITOR *mon) - : m_thread(0) - , m_shutdown(0) - , m_status(0) + : maxscale::MonitorInstance(mon) , m_id(MXS_MONITOR_DEFAULT_ID) , m_disableMasterFailback(0) , m_availableWhenDonor(0) , m_disableMasterRoleSetting(0) , m_master(NULL) - , m_script(NULL) , m_root_node_as_master(false) , m_use_priority(false) - , m_events(0) , m_set_donor_nodes(false) , m_galera_nodes_info(NULL) - , m_monitor(mon) - , m_checked(false) { HASHTABLE *nodes_info = hashtable_alloc(MAX_NUM_SLAVES, hashtable_item_strhash, diff --git a/server/modules/monitor/galeramon/galeramon.hh b/server/modules/monitor/galeramon/galeramon.hh index de20dc1d9..252e47b59 100644 --- a/server/modules/monitor/galeramon/galeramon.hh +++ b/server/modules/monitor/galeramon/galeramon.hh @@ -52,7 +52,7 @@ typedef struct galera_cluster_info } GALERA_CLUSTER_INFO; -class GaleraMonitor : public MXS_MONITOR_INSTANCE +class GaleraMonitor : public maxscale::MonitorInstance { public: GaleraMonitor(const GaleraMonitor&) = delete; @@ -66,25 +66,18 @@ public: json_t* diagnostics_json() const; private: - THREAD m_thread; /**< Monitor thread */ - int m_shutdown; /**< Flag to shutdown the monitor thread */ - int m_status; /**< Monitor status */ unsigned long m_id; /**< Monitor ID */ int m_disableMasterFailback; /**< Monitor flag for Galera Cluster Master failback */ int m_availableWhenDonor; /**< Monitor flag for Galera Cluster Donor availability */ bool m_disableMasterRoleSetting; /**< Monitor flag to disable setting master role */ MXS_MONITORED_SERVER *m_master; /**< Master server for MySQL Master/Slave replication */ - char* m_script; /**< Launchable script */ bool m_root_node_as_master; /**< Whether we require that the Master should * have a wsrep_local_index of 0 */ bool m_use_priority; /**< Use server priorities */ - uint64_t m_events; /**< Enabled monitor events */ bool m_set_donor_nodes; /**< set the wrep_sst_donor variable with an * ordered list of nodes */ HASHTABLE *m_galera_nodes_info; /**< Contains Galera Cluster variables of all nodes */ GALERA_CLUSTER_INFO m_cluster_info; /**< Contains Galera cluster info */ - MXS_MONITOR* m_monitor; /**< Pointer to generic monitor structure */ - bool m_checked; /**< Whether server access has been checked */ GaleraMonitor(MXS_MONITOR* monitor); ~GaleraMonitor(); diff --git a/server/modules/monitor/grmon/grmon.cc b/server/modules/monitor/grmon/grmon.cc index 5eb59b69c..ef228f4e9 100644 --- a/server/modules/monitor/grmon/grmon.cc +++ b/server/modules/monitor/grmon/grmon.cc @@ -26,12 +26,10 @@ #include -GRMon::GRMon(MXS_MONITOR* monitor): - m_shutdown(0), - m_master(NULL), - m_script(NULL), - m_events(0), - m_monitor(monitor) +GRMon::GRMon(MXS_MONITOR* monitor) + : MonitorInstance(monitor) + , m_master(NULL) + , m_script(NULL) { } diff --git a/server/modules/monitor/grmon/grmon.hh b/server/modules/monitor/grmon/grmon.hh index f339f8eba..997165431 100644 --- a/server/modules/monitor/grmon/grmon.hh +++ b/server/modules/monitor/grmon/grmon.hh @@ -20,7 +20,7 @@ * @file grmon.hh A MySQL Group Replication cluster monitor */ -class GRMon : public MXS_MONITOR_INSTANCE +class GRMon : public maxscale::MonitorInstance { public: GRMon(const GRMon&) = delete; @@ -34,12 +34,8 @@ public: json_t* diagnostics_json() const; private: - THREAD m_thread; /**< Monitor thread */ - int m_shutdown; /**< Flag to shutdown the monitor thread */ MXS_MONITORED_SERVER* m_master; /**< The master server */ std::string m_script; - uint64_t m_events; /**< Enabled events */ - MXS_MONITOR* m_monitor; GRMon(MXS_MONITOR* monitor); ~GRMon(); diff --git a/server/modules/monitor/mmmon/mmmon.cc b/server/modules/monitor/mmmon/mmmon.cc index dfb6b6fb7..eb71336de 100644 --- a/server/modules/monitor/mmmon/mmmon.cc +++ b/server/modules/monitor/mmmon/mmmon.cc @@ -85,16 +85,10 @@ extern "C" MXS_MODULE* MXS_CREATE_MODULE() /*lint +e14 */ MMMonitor::MMMonitor(MXS_MONITOR *monitor) - : m_thread(0) - , m_shutdown(0) - , m_status(0) + : maxscale::MonitorInstance(monitor) , m_id(MXS_MONITOR_DEFAULT_ID) , m_detectStaleMaster(false) , m_master(NULL) - , m_script(NULL) - , m_events(0) - , m_monitor(monitor) - , m_checked(false) { } diff --git a/server/modules/monitor/mmmon/mmmon.hh b/server/modules/monitor/mmmon/mmmon.hh index e58ddd9c3..b1f22e71c 100644 --- a/server/modules/monitor/mmmon/mmmon.hh +++ b/server/modules/monitor/mmmon/mmmon.hh @@ -20,7 +20,7 @@ * @file mmmon.hh - The Multi-Master monitor */ -class MMMonitor : public MXS_MONITOR_INSTANCE +class MMMonitor : public maxscale::MonitorInstance { public: MMMonitor(const MMMonitor&) = delete; @@ -34,16 +34,9 @@ public: json_t* diagnostics_json() const; private: - THREAD m_thread; /**< Monitor thread */ - int m_shutdown; /**< Flag to shutdown the monitor thread */ - int m_status; /**< Monitor status */ unsigned long m_id; /**< Monitor ID */ int m_detectStaleMaster; /**< Monitor flag for Stale Master detection */ MXS_MONITORED_SERVER *m_master; /**< Master server for Master/Slave replication */ - char* m_script; /**< Script to call when state changes occur on servers */ - uint64_t m_events; /**< enabled events */ - MXS_MONITOR* m_monitor; /**< Pointer to generic monitor structure */ - bool m_checked; /**< Whether server access has been checked */ MMMonitor(MXS_MONITOR* monitor); ~MMMonitor(); diff --git a/server/modules/monitor/ndbclustermon/ndbclustermon.cc b/server/modules/monitor/ndbclustermon/ndbclustermon.cc index 46363f570..87ba61500 100644 --- a/server/modules/monitor/ndbclustermon/ndbclustermon.cc +++ b/server/modules/monitor/ndbclustermon/ndbclustermon.cc @@ -71,15 +71,9 @@ extern "C" MXS_MODULE* MXS_CREATE_MODULE() NDBCMonitor::NDBCMonitor(MXS_MONITOR *monitor) - : m_thread(0) + : maxscale::MonitorInstance(monitor) , m_id(MXS_MONITOR_DEFAULT_ID) - , m_events(0) - , m_shutdown(0) - , m_status(0) , m_master(NULL) - , m_script(NULL) - , m_monitor(NULL) - , m_checked(false) { } diff --git a/server/modules/monitor/ndbclustermon/ndbclustermon.hh b/server/modules/monitor/ndbclustermon/ndbclustermon.hh index a5b877d36..61fee95ab 100644 --- a/server/modules/monitor/ndbclustermon/ndbclustermon.hh +++ b/server/modules/monitor/ndbclustermon/ndbclustermon.hh @@ -20,7 +20,7 @@ * @file ndbcclustermon.hh A NDBC cluster monitor */ -class NDBCMonitor : public MXS_MONITOR_INSTANCE +class NDBCMonitor : public maxscale::MonitorInstance { public: NDBCMonitor(const NDBCMonitor&) = delete; @@ -34,15 +34,8 @@ public: json_t* diagnostics_json() const; private: - THREAD m_thread; /**< Monitor thread */ unsigned long m_id; /**< Monitor ID */ - uint64_t m_events; /**< enabled events */ - int m_shutdown; /**< Flag to shutdown the monitor thread */ - int m_status; /**< Monitor status */ MXS_MONITORED_SERVER *m_master; /**< Master server for MySQL Master/Slave replication */ - char* m_script; /**< Script to call when state changes occur on servers */ - MXS_MONITOR* m_monitor; /**< Pointer to generic monitor structure */ - bool m_checked; /**< Whether server access has been checked */ NDBCMonitor(MXS_MONITOR* monitor); ~NDBCMonitor();