From 8fed6752bdd1031267ecfceae3cf6690b5abec66 Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Thu, 24 May 2018 12:44:55 +0300 Subject: [PATCH] MXS-1775 Fix NDPCMonitor to update pending_status Instead of continuously updating the status of the server object, the monitor should update the pending_status of the monitor object and then only at the end update the status of the server object. --- .../monitor/ndbclustermon/ndbclustermon.cc | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/server/modules/monitor/ndbclustermon/ndbclustermon.cc b/server/modules/monitor/ndbclustermon/ndbclustermon.cc index 909c59b22..95d5a331e 100644 --- a/server/modules/monitor/ndbclustermon/ndbclustermon.cc +++ b/server/modules/monitor/ndbclustermon/ndbclustermon.cc @@ -133,15 +133,15 @@ void NDBCMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server) if (!mon_connection_is_ok(rval)) { - server_clear_status_nolock(monitored_server->server, SERVER_RUNNING); + monitor_clear_pending_status(monitored_server, SERVER_RUNNING); if (mysql_errno(monitored_server->con) == ER_ACCESS_DENIED_ERROR) { - server_set_status_nolock(monitored_server->server, SERVER_AUTH_ERROR); + monitor_set_pending_status(monitored_server, SERVER_AUTH_ERROR); } else { - server_clear_status_nolock(monitored_server->server, SERVER_AUTH_ERROR); + monitor_clear_pending_status(monitored_server, SERVER_AUTH_ERROR); } monitored_server->server->node_id = -1; @@ -154,9 +154,9 @@ void NDBCMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server) return; } - server_clear_status_nolock(monitored_server->server, SERVER_AUTH_ERROR); + monitor_clear_pending_status(monitored_server, SERVER_AUTH_ERROR); /* If we get this far then we have a working connection */ - server_set_status_nolock(monitored_server->server, SERVER_RUNNING); + monitor_set_pending_status(monitored_server, SERVER_RUNNING); MYSQL_ROW row; MYSQL_RES *result; @@ -227,12 +227,14 @@ void NDBCMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server) if (isjoined) { - server_set_status_nolock(monitored_server->server, SERVER_NDB); + monitor_set_pending_status(monitored_server, SERVER_NDB); monitored_server->server->depth = 0; } else { - server_clear_status_nolock(monitored_server->server, SERVER_NDB); + monitor_clear_pending_status(monitored_server, SERVER_NDB); monitored_server->server->depth = -1; } + + monitored_server->server->status = monitored_server->pending_status; }