diff --git a/server/modules/monitor/auroramon/auroramon.cc b/server/modules/monitor/auroramon/auroramon.cc index 62ce45f35..45bc70748 100644 --- a/server/modules/monitor/auroramon/auroramon.cc +++ b/server/modules/monitor/auroramon/auroramon.cc @@ -60,11 +60,18 @@ void AuroraMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server) if (!mon_connection_is_ok(rval)) { - /** Failed to connect to the database */ + server_clear_status_nolock(monitored_server->server, SERVER_RUNNING); + if (mysql_errno(monitored_server->con) == ER_ACCESS_DENIED_ERROR) { server_set_status_nolock(monitored_server->server, SERVER_AUTH_ERROR); } + else + { + server_clear_status_nolock(monitored_server->server, SERVER_AUTH_ERROR); + } + + monitored_server->server->node_id = -1; if (mon_status_changed(monitored_server) && mon_print_fail_status(monitored_server)) { diff --git a/server/modules/monitor/galeramon/galeramon.cc b/server/modules/monitor/galeramon/galeramon.cc index d37548cd7..510940161 100644 --- a/server/modules/monitor/galeramon/galeramon.cc +++ b/server/modules/monitor/galeramon/galeramon.cc @@ -263,8 +263,11 @@ static bool using_xtrabackup(MXS_MONITORED_SERVER *database, const char* server_ void GaleraMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server) { mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, monitored_server); + if (!mon_connection_is_ok(rval)) { + server_clear_status_nolock(monitored_server->server, SERVER_RUNNING); + if (mysql_errno(monitored_server->con) == ER_ACCESS_DENIED_ERROR) { server_set_status_nolock(monitored_server->server, SERVER_AUTH_ERROR); @@ -276,8 +279,6 @@ void GaleraMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server) monitored_server->server->node_id = -1; - server_clear_status_nolock(monitored_server->server, SERVER_RUNNING); - if (mon_status_changed(monitored_server) && mon_print_fail_status(monitored_server)) { mon_log_connect_error(monitored_server, rval); diff --git a/server/modules/monitor/grmon/grmon.cc b/server/modules/monitor/grmon/grmon.cc index 8efe1f12f..d7ed27206 100644 --- a/server/modules/monitor/grmon/grmon.cc +++ b/server/modules/monitor/grmon/grmon.cc @@ -131,6 +131,8 @@ void GRMon::update_server_status(MXS_MONITORED_SERVER* monitored_server) if (!mon_connection_is_ok(rval)) { + server_clear_status_nolock(monitored_server->server, SERVER_RUNNING); + if (mysql_errno(monitored_server->con) == ER_ACCESS_DENIED_ERROR) { server_set_status_nolock(monitored_server->server, SERVER_AUTH_ERROR); @@ -142,8 +144,6 @@ void GRMon::update_server_status(MXS_MONITORED_SERVER* monitored_server) monitored_server->server->node_id = -1; - server_clear_status_nolock(monitored_server->server, SERVER_RUNNING); - if (mon_status_changed(monitored_server) && mon_print_fail_status(monitored_server)) { mon_log_connect_error(monitored_server, rval); diff --git a/server/modules/monitor/mmmon/mmmon.cc b/server/modules/monitor/mmmon/mmmon.cc index cba8eaeac..e8c5137e6 100644 --- a/server/modules/monitor/mmmon/mmmon.cc +++ b/server/modules/monitor/mmmon/mmmon.cc @@ -150,23 +150,21 @@ void MMMonitor::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); } - server_clear_status_nolock(monitored_server->server, SERVER_RUNNING); - monitor_clear_pending_status(monitored_server, SERVER_RUNNING); + else + { + server_clear_status_nolock(monitored_server->server, SERVER_AUTH_ERROR); + monitor_clear_pending_status(monitored_server, SERVER_AUTH_ERROR); + } - /* Also clear M/S state in both server and monitor server pending struct */ - server_clear_status_nolock(monitored_server->server, SERVER_SLAVE); - server_clear_status_nolock(monitored_server->server, SERVER_MASTER); - monitor_clear_pending_status(monitored_server, SERVER_SLAVE); - monitor_clear_pending_status(monitored_server, SERVER_MASTER); - - /* Clean addition status too */ - server_clear_status_nolock(monitored_server->server, SERVER_STALE_STATUS); - monitor_clear_pending_status(monitored_server, SERVER_STALE_STATUS); + monitored_server->server->node_id = -1; if (mon_status_changed(monitored_server) && mon_print_fail_status(monitored_server)) { diff --git a/server/modules/monitor/ndbclustermon/ndbclustermon.cc b/server/modules/monitor/ndbclustermon/ndbclustermon.cc index d6b841f43..909c59b22 100644 --- a/server/modules/monitor/ndbclustermon/ndbclustermon.cc +++ b/server/modules/monitor/ndbclustermon/ndbclustermon.cc @@ -139,6 +139,10 @@ void NDBCMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server) { server_set_status_nolock(monitored_server->server, SERVER_AUTH_ERROR); } + else + { + server_clear_status_nolock(monitored_server->server, SERVER_AUTH_ERROR); + } monitored_server->server->node_id = -1;