diff --git a/server/modules/monitor/auroramon/auroramon.cc b/server/modules/monitor/auroramon/auroramon.cc index dc3e7391d..62ce45f35 100644 --- a/server/modules/monitor/auroramon/auroramon.cc +++ b/server/modules/monitor/auroramon/auroramon.cc @@ -56,55 +56,55 @@ void AuroraMonitor::destroy() */ void AuroraMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server) { - SERVER temp_server = {}; - temp_server.status = monitored_server->server->status; - server_clear_status_nolock(&temp_server, - SERVER_RUNNING | SERVER_MASTER | SERVER_SLAVE | SERVER_AUTH_ERROR); - - /** Try to connect to or ping the database */ mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, monitored_server); - if (mon_connection_is_ok(rval)) - { - server_set_status_nolock(&temp_server, SERVER_RUNNING); - MYSQL_RES *result; - - /** Connection is OK, query for replica status */ - if (mxs_mysql_query(monitored_server->con, "SELECT @@aurora_server_id, server_id FROM " - "information_schema.replica_host_status " - "WHERE session_id = 'MASTER_SESSION_ID'") == 0 && - (result = mysql_store_result(monitored_server->con))) - { - ss_dassert(mysql_field_count(monitored_server->con) == 2); - MYSQL_ROW row = mysql_fetch_row(result); - int status = SERVER_SLAVE; - - /** The master will return a row with two identical non-NULL fields */ - if (row[0] && row[1] && strcmp(row[0], row[1]) == 0) - { - status = SERVER_MASTER; - } - - server_set_status_nolock(&temp_server, status); - mysql_free_result(result); - } - else - { - mon_report_query_error(monitored_server); - } - } - else + if (!mon_connection_is_ok(rval)) { /** Failed to connect to the database */ if (mysql_errno(monitored_server->con) == ER_ACCESS_DENIED_ERROR) { - server_set_status_nolock(&temp_server, SERVER_AUTH_ERROR); + server_set_status_nolock(monitored_server->server, SERVER_AUTH_ERROR); } if (mon_status_changed(monitored_server) && mon_print_fail_status(monitored_server)) { mon_log_connect_error(monitored_server, rval); } + + return; + } + + SERVER temp_server = {}; + temp_server.status = monitored_server->server->status; + server_clear_status_nolock(&temp_server, + SERVER_RUNNING | SERVER_MASTER | SERVER_SLAVE | SERVER_AUTH_ERROR); + + + server_set_status_nolock(&temp_server, SERVER_RUNNING); + MYSQL_RES *result; + + /** Connection is OK, query for replica status */ + if (mxs_mysql_query(monitored_server->con, "SELECT @@aurora_server_id, server_id FROM " + "information_schema.replica_host_status " + "WHERE session_id = 'MASTER_SESSION_ID'") == 0 && + (result = mysql_store_result(monitored_server->con))) + { + ss_dassert(mysql_field_count(monitored_server->con) == 2); + MYSQL_ROW row = mysql_fetch_row(result); + int status = SERVER_SLAVE; + + /** The master will return a row with two identical non-NULL fields */ + if (row[0] && row[1] && strcmp(row[0], row[1]) == 0) + { + status = SERVER_MASTER; + } + + server_set_status_nolock(&temp_server, status); + mysql_free_result(result); + } + else + { + mon_report_query_error(monitored_server); } server_transfer_status(monitored_server->server, &temp_server); diff --git a/server/modules/monitor/galeramon/galeramon.cc b/server/modules/monitor/galeramon/galeramon.cc index b11e30f7a..d37548cd7 100644 --- a/server/modules/monitor/galeramon/galeramon.cc +++ b/server/modules/monitor/galeramon/galeramon.cc @@ -262,10 +262,6 @@ static bool using_xtrabackup(MXS_MONITORED_SERVER *database, const char* server_ */ void GaleraMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server) { - MYSQL_ROW row; - MYSQL_RES *result; - char *server_string; - mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, monitored_server); if (!mon_connection_is_ok(rval)) { @@ -290,6 +286,10 @@ void GaleraMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server) return; } + MYSQL_ROW row; + MYSQL_RES *result; + char *server_string; + /* If we get this far then we have a working connection */ server_set_status_nolock(monitored_server->server, SERVER_RUNNING); diff --git a/server/modules/monitor/grmon/grmon.cc b/server/modules/monitor/grmon/grmon.cc index 36eb200e7..8efe1f12f 100644 --- a/server/modules/monitor/grmon/grmon.cc +++ b/server/modules/monitor/grmon/grmon.cc @@ -148,12 +148,12 @@ void GRMon::update_server_status(MXS_MONITORED_SERVER* monitored_server) { mon_log_connect_error(monitored_server, rval); } + + return; } - else - { - /* If we get this far then we have a working connection */ - server_set_status_nolock(monitored_server->server, SERVER_RUNNING); - } + + /* If we get this far then we have a working connection */ + server_set_status_nolock(monitored_server->server, SERVER_RUNNING); if (is_master(monitored_server)) { diff --git a/server/modules/monitor/mmmon/mmmon.cc b/server/modules/monitor/mmmon/mmmon.cc index df505bb52..cba8eaeac 100644 --- a/server/modules/monitor/mmmon/mmmon.cc +++ b/server/modules/monitor/mmmon/mmmon.cc @@ -146,13 +146,6 @@ json_t* MMMonitor::diagnostics_json() const */ void MMMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server) { - MYSQL_ROW row; - MYSQL_RES *result; - int isslave = 0; - int ismaster = 0; - unsigned long int server_version = 0; - char *server_string; - mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, monitored_server); if (!mon_connection_is_ok(rval)) @@ -179,13 +172,19 @@ void MMMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server) { mon_log_connect_error(monitored_server, rval); } + return; } - else - { - server_clear_status_nolock(monitored_server->server, SERVER_AUTH_ERROR); - monitor_clear_pending_status(monitored_server, SERVER_AUTH_ERROR); - } + + server_clear_status_nolock(monitored_server->server, SERVER_AUTH_ERROR); + monitor_clear_pending_status(monitored_server, SERVER_AUTH_ERROR); + + MYSQL_ROW row; + MYSQL_RES *result; + int isslave = 0; + int ismaster = 0; + unsigned long int server_version = 0; + char *server_string; /* Store current status in both server and monitor server pending struct */ server_set_status_nolock(monitored_server->server, SERVER_RUNNING); diff --git a/server/modules/monitor/ndbclustermon/ndbclustermon.cc b/server/modules/monitor/ndbclustermon/ndbclustermon.cc index fcb6d62b8..d6b841f43 100644 --- a/server/modules/monitor/ndbclustermon/ndbclustermon.cc +++ b/server/modules/monitor/ndbclustermon/ndbclustermon.cc @@ -129,12 +129,8 @@ static json_t* diagnostics_json(const MXS_MONITOR_INSTANCE *mon) */ void NDBCMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server) { - MYSQL_ROW row; - MYSQL_RES *result; - int isjoined = 0; - char *server_string; - 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); @@ -150,6 +146,7 @@ void NDBCMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server) { mon_log_connect_error(monitored_server, rval); } + return; } @@ -157,6 +154,11 @@ void NDBCMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server) /* If we get this far then we have a working connection */ server_set_status_nolock(monitored_server->server, SERVER_RUNNING); + MYSQL_ROW row; + MYSQL_RES *result; + int isjoined = 0; + char *server_string; + /* get server version string */ mxs_mysql_set_server_version(monitored_server->con, monitored_server->server); server_string = monitored_server->server->version_string;