MXS-1775 Handle connection error the same way

All monitors (but for MariaDBMon) now handle connection errors in
the same manner.

An exception is MMMon that modifies both the server status and the
monitor status. However, in fact, all other monitors do it the wrong
way and update the server status directly instead of only the monitor
status that then at the end of the loop should be copied to the server
status.
This commit is contained in:
Johan Wikman
2018-05-24 10:55:20 +03:00
parent 5196371762
commit 8d1b8a1774
5 changed files with 26 additions and 16 deletions

View File

@ -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))
{

View File

@ -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);

View File

@ -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);

View File

@ -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))
{

View File

@ -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;