From ec8b9c773a69a3b08a6a4f5d13215f2acaf658cd Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Fri, 4 May 2018 10:22:13 +0300 Subject: [PATCH] MXS-1848 Use MXS_SPECIFIC_MONITOR type in monitor APIs Now, all monitor functions but startMonitor takes a MXS_SPECIFIC_MONITOR instead of MXS_MONITOR. That is, startMonitor is now like a static factory member returning a new specific monitor instance and the other functions are like member functions of that instance. --- include/maxscale/monitor.h | 15 ++++++++++++--- server/core/monitor.cc | 8 ++++---- server/modules/monitor/auroramon/auroramon.cc | 8 ++++---- server/modules/monitor/galeramon/galeramon.cc | 18 +++++++++--------- server/modules/monitor/grmon/grmon.cc | 9 ++++----- .../modules/monitor/mariadbmon/mariadbmon.cc | 12 ++++++------ server/modules/monitor/mmmon/mmmon.cc | 18 +++++++++--------- .../monitor/ndbclustermon/ndbclustermon.cc | 14 +++++++------- 8 files changed, 55 insertions(+), 47 deletions(-) diff --git a/include/maxscale/monitor.h b/include/maxscale/monitor.h index e3671f1b6..382627bc3 100644 --- a/include/maxscale/monitor.h +++ b/include/maxscale/monitor.h @@ -87,17 +87,26 @@ typedef struct mxs_monitor_object * * @param monitor The monitor object */ - void (*stopMonitor)(MXS_MONITOR *monitor); - void (*diagnostics)(DCB *, const MXS_MONITOR *); + void (*stopMonitor)(MXS_SPECIFIC_MONITOR *monitor); + + /** + * @brief Write diagnostic information to a DCB. + * + * @param monitor The monitor object. + * @param dcb The dcb to write to. + */ + void (*diagnostics)(const MXS_SPECIFIC_MONITOR* monitor, DCB* dcb); /** * @brief Return diagnostic information about the monitor * + * @param monitor The monitor object. + * * @return A JSON object representing the state of the monitor * * @see jansson.h */ - json_t* (*diagnostics_json)(const MXS_MONITOR *monitor); + json_t* (*diagnostics_json)(const MXS_SPECIFIC_MONITOR *monitor); } MXS_MONITOR_OBJECT; /** diff --git a/server/core/monitor.cc b/server/core/monitor.cc index a0f17a267..1816d1a26 100644 --- a/server/core/monitor.cc +++ b/server/core/monitor.cc @@ -158,7 +158,7 @@ monitor_free(MXS_MONITOR *mon) { MXS_MONITOR *ptr; - mon->module->stopMonitor(mon); + mon->module->stopMonitor(mon->handle); mon->state = MONITOR_STATE_FREED; spinlock_acquire(&monLock); if (allMonitors == mon) @@ -253,7 +253,7 @@ monitorStop(MXS_MONITOR *monitor) if (monitor->state == MONITOR_STATE_RUNNING) { monitor->state = MONITOR_STATE_STOPPING; - monitor->module->stopMonitor(monitor); + monitor->module->stopMonitor(monitor->handle); monitor->state = MONITOR_STATE_STOPPED; MXS_MONITORED_SERVER* db = monitor->monitored_servers; @@ -539,7 +539,7 @@ monitorShow(DCB *dcb, MXS_MONITOR *monitor) { if (monitor->module->diagnostics) { - monitor->module->diagnostics(dcb, monitor); + monitor->module->diagnostics(monitor->handle, dcb); } else { @@ -1854,7 +1854,7 @@ json_t* monitor_json_data(const MXS_MONITOR* monitor, const char* host) if (monitor->handle && monitor->module->diagnostics_json) { - json_t* diag = monitor->module->diagnostics_json(monitor); + json_t* diag = monitor->module->diagnostics_json(monitor->handle); if (diag) { diff --git a/server/modules/monitor/auroramon/auroramon.cc b/server/modules/monitor/auroramon/auroramon.cc index 81c574399..35c87d203 100644 --- a/server/modules/monitor/auroramon/auroramon.cc +++ b/server/modules/monitor/auroramon/auroramon.cc @@ -235,9 +235,9 @@ startMonitor(MXS_MONITOR *mon, const MXS_CONFIG_PARAMETER *params) * @param arg Handle on thr running monior */ static void -stopMonitor(MXS_MONITOR *mon) +stopMonitor(MXS_SPECIFIC_MONITOR *mon) { - AURORA_MONITOR *handle = (AURORA_MONITOR *) mon->handle; + AURORA_MONITOR *handle = static_cast(mon); handle->shutdown = true; thread_wait(handle->thread); @@ -250,7 +250,7 @@ stopMonitor(MXS_MONITOR *mon) * @param mon The monitor */ static void -diagnostics(DCB *dcb, const MXS_MONITOR *mon) +diagnostics(const MXS_SPECIFIC_MONITOR *mon, DCB *dcb) { } @@ -260,7 +260,7 @@ diagnostics(DCB *dcb, const MXS_MONITOR *mon) * @param dcb DCB to send output * @param mon The monitor */ -static json_t* diagnostics_json(const MXS_MONITOR *mon) +static json_t* diagnostics_json(const MXS_SPECIFIC_MONITOR *mon) { return NULL; } diff --git a/server/modules/monitor/galeramon/galeramon.cc b/server/modules/monitor/galeramon/galeramon.cc index 1a820c616..afb065cb3 100644 --- a/server/modules/monitor/galeramon/galeramon.cc +++ b/server/modules/monitor/galeramon/galeramon.cc @@ -32,9 +32,9 @@ static bool warn_erange_on_local_index = true; static MXS_SPECIFIC_MONITOR *startMonitor(MXS_MONITOR *, const MXS_CONFIG_PARAMETER *params); -static void stopMonitor(MXS_MONITOR *); -static void diagnostics(DCB *, const MXS_MONITOR *); -static json_t* diagnostics_json(const MXS_MONITOR *); +static void stopMonitor(MXS_SPECIFIC_MONITOR *); +static void diagnostics(const MXS_SPECIFIC_MONITOR *, DCB *); +static json_t* diagnostics_json(const MXS_SPECIFIC_MONITOR *); static MXS_MONITORED_SERVER *get_candidate_master(MXS_MONITOR*); static MXS_MONITORED_SERVER *set_cluster_master(MXS_MONITORED_SERVER *, MXS_MONITORED_SERVER *, int); static void disableMasterFailback(void *, int); @@ -200,9 +200,9 @@ startMonitor(MXS_MONITOR *mon, const MXS_CONFIG_PARAMETER *params) * @param arg Handle on thr running monior */ static void -stopMonitor(MXS_MONITOR *mon) +stopMonitor(MXS_SPECIFIC_MONITOR *mon) { - GALERA_MONITOR *handle = (GALERA_MONITOR *) mon->handle; + GALERA_MONITOR *handle = static_cast(mon); handle->shutdown = 1; thread_wait(handle->thread); @@ -215,9 +215,9 @@ stopMonitor(MXS_MONITOR *mon) * @param arg The monitor handle */ static void -diagnostics(DCB *dcb, const MXS_MONITOR *mon) +diagnostics(const MXS_SPECIFIC_MONITOR *mon, DCB *dcb) { - const GALERA_MONITOR *handle = (const GALERA_MONITOR *) mon->handle; + const GALERA_MONITOR *handle = static_cast(mon); dcb_printf(dcb, "Master Failback:\t%s\n", (handle->disableMasterFailback == 1) ? "off" : "on"); dcb_printf(dcb, "Available when Donor:\t%s\n", (handle->availableWhenDonor == 1) ? "on" : "off"); @@ -240,10 +240,10 @@ diagnostics(DCB *dcb, const MXS_MONITOR *mon) * * @param arg The monitor handle */ -static json_t* diagnostics_json(const MXS_MONITOR *mon) +static json_t* diagnostics_json(const MXS_SPECIFIC_MONITOR *mon) { json_t* rval = json_object(); - const GALERA_MONITOR *handle = (const GALERA_MONITOR *)mon->handle; + const GALERA_MONITOR *handle = static_cast(mon); json_object_set_new(rval, "disable_master_failback", json_boolean(handle->disableMasterFailback)); json_object_set_new(rval, "disable_master_role_setting", json_boolean(handle->disableMasterRoleSetting)); diff --git a/server/modules/monitor/grmon/grmon.cc b/server/modules/monitor/grmon/grmon.cc index 0ca3f8328..9f928d7d5 100644 --- a/server/modules/monitor/grmon/grmon.cc +++ b/server/modules/monitor/grmon/grmon.cc @@ -111,12 +111,11 @@ startMonitor(MXS_MONITOR *mon, const MXS_CONFIG_PARAMETER *params) * @param arg Handle on thr running monior */ static void -stopMonitor(MXS_MONITOR *mon) +stopMonitor(MXS_SPECIFIC_MONITOR *mon) { - GRMon *handle = (GRMon *) mon->handle; + GRMon *handle = static_cast(mon); handle->stop(); delete handle; - mon->handle = NULL; } /** @@ -126,7 +125,7 @@ stopMonitor(MXS_MONITOR *mon) * @param arg The monitor handle */ static void -diagnostics(DCB *dcb, const MXS_MONITOR *mon) +diagnostics(const MXS_SPECIFIC_MONITOR *mon, DCB *dcb) { } @@ -135,7 +134,7 @@ diagnostics(DCB *dcb, const MXS_MONITOR *mon) * * @param arg The monitor handle */ -static json_t* diagnostics_json(const MXS_MONITOR *mon) +static json_t* diagnostics_json(const MXS_SPECIFIC_MONITOR *mon) { return NULL; } diff --git a/server/modules/monitor/mariadbmon/mariadbmon.cc b/server/modules/monitor/mariadbmon/mariadbmon.cc index 130052e35..e0069d6c4 100644 --- a/server/modules/monitor/mariadbmon/mariadbmon.cc +++ b/server/modules/monitor/mariadbmon/mariadbmon.cc @@ -923,9 +923,9 @@ static MXS_SPECIFIC_MONITOR* startMonitor(MXS_MONITOR *monitor, * * @param mon The monitor that should be stopped. */ -static void stopMonitor(MXS_MONITOR *mon) +static void stopMonitor(MXS_SPECIFIC_MONITOR *mon) { - auto handle = static_cast(mon->handle); + auto handle = static_cast(mon); handle->stop(); } @@ -935,9 +935,9 @@ static void stopMonitor(MXS_MONITOR *mon) * @param dcb DCB to print diagnostics * @param arg The monitor handle */ -static void diagnostics(DCB *dcb, const MXS_MONITOR *mon) +static void diagnostics(const MXS_SPECIFIC_MONITOR *mon, DCB *dcb) { - const MariaDBMonitor* handle = static_cast(mon->handle); + const MariaDBMonitor* handle = static_cast(mon); handle->diagnostics(dcb); } @@ -946,9 +946,9 @@ static void diagnostics(DCB *dcb, const MXS_MONITOR *mon) * * @param arg The monitor handle */ -static json_t* diagnostics_json(const MXS_MONITOR *mon) +static json_t* diagnostics_json(const MXS_SPECIFIC_MONITOR *mon) { - const MariaDBMonitor *handle = (const MariaDBMonitor *)mon->handle; + const MariaDBMonitor *handle = static_cast(mon); return handle->diagnostics_json(); } diff --git a/server/modules/monitor/mmmon/mmmon.cc b/server/modules/monitor/mmmon/mmmon.cc index ea8372431..3a7edf4bb 100644 --- a/server/modules/monitor/mmmon/mmmon.cc +++ b/server/modules/monitor/mmmon/mmmon.cc @@ -39,9 +39,9 @@ MXS_MODULE info = /*lint +e14 */ static MXS_SPECIFIC_MONITOR *startMonitor(MXS_MONITOR *, const MXS_CONFIG_PARAMETER *); -static void stopMonitor(MXS_MONITOR *); -static void diagnostics(DCB *, const MXS_MONITOR *); -static json_t* diagnostics_json(const MXS_MONITOR *); +static void stopMonitor(MXS_SPECIFIC_MONITOR *); +static void diagnostics(const MXS_SPECIFIC_MONITOR *, DCB *); +static json_t* diagnostics_json(const MXS_SPECIFIC_MONITOR *); static void detectStaleMaster(void *, int); static MXS_MONITORED_SERVER *get_current_master(MXS_MONITOR *); static bool isMySQLEvent(mxs_monitor_event_t event); @@ -165,9 +165,9 @@ startMonitor(MXS_MONITOR *mon, const MXS_CONFIG_PARAMETER *params) * @param arg Handle on thr running monior */ static void -stopMonitor(MXS_MONITOR *mon) +stopMonitor(MXS_SPECIFIC_MONITOR *mon) { - MM_MONITOR *handle = (MM_MONITOR *) mon->handle; + MM_MONITOR *handle = static_cast(mon); handle->shutdown = 1; thread_wait(handle->thread); @@ -179,9 +179,9 @@ stopMonitor(MXS_MONITOR *mon) * @param dcb DCB to print diagnostics * @param arg The monitor handle */ -static void diagnostics(DCB *dcb, const MXS_MONITOR *mon) +static void diagnostics(const MXS_SPECIFIC_MONITOR *mon, DCB *dcb) { - const MM_MONITOR *handle = (const MM_MONITOR *) mon->handle; + const MM_MONITOR *handle = static_cast(mon); dcb_printf(dcb, "Detect Stale Master:\t%s\n", (handle->detectStaleMaster == 1) ? "enabled" : "disabled"); } @@ -191,9 +191,9 @@ static void diagnostics(DCB *dcb, const MXS_MONITOR *mon) * * @param arg The monitor handle */ -static json_t* diagnostics_json(const MXS_MONITOR *mon) +static json_t* diagnostics_json(const MXS_SPECIFIC_MONITOR *mon) { - const MM_MONITOR *handle = (const MM_MONITOR *)mon->handle; + const MM_MONITOR *handle = static_cast(mon); json_t* rval = json_object(); json_object_set_new(rval, "detect_stale_master", json_boolean(handle->detectStaleMaster)); diff --git a/server/modules/monitor/ndbclustermon/ndbclustermon.cc b/server/modules/monitor/ndbclustermon/ndbclustermon.cc index 24633567e..7ffbd4788 100644 --- a/server/modules/monitor/ndbclustermon/ndbclustermon.cc +++ b/server/modules/monitor/ndbclustermon/ndbclustermon.cc @@ -32,9 +32,9 @@ static void monitorMain(void *); static MXS_SPECIFIC_MONITOR *startMonitor(MXS_MONITOR *, const MXS_CONFIG_PARAMETER *params); -static void stopMonitor(MXS_MONITOR *); -static void diagnostics(DCB *, const MXS_MONITOR *); -static json_t* diagnostics_json(const MXS_MONITOR *); +static void stopMonitor(MXS_SPECIFIC_MONITOR *); +static void diagnostics(const MXS_SPECIFIC_MONITOR *, DCB *); +static json_t* diagnostics_json(const MXS_SPECIFIC_MONITOR *); bool isNdbEvent(mxs_monitor_event_t event); @@ -158,9 +158,9 @@ startMonitor(MXS_MONITOR *mon, const MXS_CONFIG_PARAMETER *params) * @param arg Handle on thr running monior */ static void -stopMonitor(MXS_MONITOR *mon) +stopMonitor(MXS_SPECIFIC_MONITOR *mon) { - NDBC_MONITOR *handle = (NDBC_MONITOR *) mon->handle; + NDBC_MONITOR *handle = static_cast(mon); handle->shutdown = 1; thread_wait(handle->thread); @@ -173,7 +173,7 @@ stopMonitor(MXS_MONITOR *mon) * @param arg The monitor handle */ static void -diagnostics(DCB *dcb, const MXS_MONITOR *mon) +diagnostics(const MXS_SPECIFIC_MONITOR *mon, DCB *dcb) { } @@ -183,7 +183,7 @@ diagnostics(DCB *dcb, const MXS_MONITOR *mon) * @param dcb DCB to send output * @param arg The monitor handle */ -static json_t* diagnostics_json(const MXS_MONITOR *mon) +static json_t* diagnostics_json(const MXS_SPECIFIC_MONITOR *mon) { return NULL; }