MXS-1775 Use same arrangement in update_server_status
All monitors (but possible for MariaDBMon) now handle the connecting to the server in the same way, that is, if the connecting fails, then the status is updated and we return.
This commit is contained in:
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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))
|
||||
{
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user