From 667440fbefb17290233691fbedaa7c8cea9d75c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Wed, 27 Sep 2017 11:04:50 +0300 Subject: [PATCH] MXS-1446: Calculate the monitor event only once As the monitor event is now stored in the server, it can be re-used when the event is converted to string form. This also fixes the problem of state calculation taking place when the event happened in the past. --- server/core/monitor.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/server/core/monitor.cc b/server/core/monitor.cc index bb06ece03..34dc395cc 100644 --- a/server/core/monitor.cc +++ b/server/core/monitor.cc @@ -946,6 +946,8 @@ monitor_clear_pending_status(MXS_MONITOR_SERVERS *ptr, int bit) * * @param node The monitor server data for a particular server * @result monitor_event_t A monitor event (enum) + * + * @note This function must only be called from mon_process_state_changes */ static mxs_monitor_event_t mon_get_event_type(MXS_MONITOR_SERVERS* node) { @@ -1079,7 +1081,7 @@ const char* mon_get_event_name(mxs_monitor_event_t event) */ static const char* mon_get_event_name(MXS_MONITOR_SERVERS* node) { - return mon_get_event_name(mon_get_event_type(node)); + return mon_get_event_name((mxs_monitor_event_t)node->server->last_event); } enum credentials_approach_t @@ -1733,8 +1735,6 @@ void mon_process_state_changes(MXS_MONITOR *monitor, const char *script, uint64_ { if (mon_status_changed(ptr)) { - mon_log_state_change(ptr); - /** * The last executed event will be needed if a passive MaxScale is * promoted to an active one and the last event that occurred on @@ -1747,6 +1747,7 @@ void mon_process_state_changes(MXS_MONITOR *monitor, const char *script, uint64_ ptr->server->last_event = event; ptr->server->triggered_at = hkheartbeat; ptr->new_event = true; + mon_log_state_change(ptr); if (event == MASTER_DOWN_EVENT) { @@ -1762,7 +1763,7 @@ void mon_process_state_changes(MXS_MONITOR *monitor, const char *script, uint64_ monitor->last_master_up = hkheartbeat; } - if (script && (events & mon_get_event_type(ptr))) + if (script && (events & event)) { monitor_launch_script(monitor, ptr, script, monitor->script_timeout); } @@ -1790,7 +1791,7 @@ void mon_process_state_changes(MXS_MONITOR *monitor, const char *script, uint64_ if (t > timeout) { MXS_WARNING("Failover of server '%s' did not take place within " - "%u seconds, failover script needs to be re-triggered", + "%u seconds, failover needs to be re-triggered", ptr->server->unique_name, monitor->failover_timeout); failed_master = ptr; ptr->new_event = false;