MXS-1775 Check connection in MonitorInstance::tick()
Since the connection checking is done in an identical fashion in all monitors, it can be moved to the base-class.
This commit is contained in:
@ -72,8 +72,13 @@ protected:
|
||||
* on each server.
|
||||
*
|
||||
* The default implementation will:
|
||||
* - Not call @update_server_status for a server that is in maintenance.
|
||||
* - Not call @c update_server_status for a server that is in maintenance.
|
||||
* - Before calling, update the previous status of the server.
|
||||
* - Before calling, update the pending status of the monitored server object
|
||||
* to the status of the corresponing server object.
|
||||
* - Ensure that there is a connection to the server. If that fails, then
|
||||
* the pending status will be updated accordingly and @c update_server_status
|
||||
* will *not* be called.
|
||||
* - After the call, update the error count of the server.
|
||||
*/
|
||||
virtual void tick();
|
||||
|
@ -2644,7 +2644,33 @@ void MonitorInstance::tick()
|
||||
pMs->mon_prev_status = pMs->server->status;
|
||||
pMs->pending_status = pMs->server->status;
|
||||
|
||||
mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, pMs);
|
||||
|
||||
if (mon_connection_is_ok(rval))
|
||||
{
|
||||
monitor_clear_pending_status(pMs, SERVER_AUTH_ERROR);
|
||||
monitor_set_pending_status(pMs, SERVER_RUNNING);
|
||||
|
||||
update_server_status(pMs);
|
||||
}
|
||||
else
|
||||
{
|
||||
monitor_clear_pending_status(pMs, SERVER_RUNNING);
|
||||
|
||||
if (mysql_errno(pMs->con) == ER_ACCESS_DENIED_ERROR)
|
||||
{
|
||||
monitor_set_pending_status(pMs, SERVER_AUTH_ERROR);
|
||||
}
|
||||
else
|
||||
{
|
||||
monitor_clear_pending_status(pMs, SERVER_AUTH_ERROR);
|
||||
}
|
||||
|
||||
if (mon_status_changed(pMs) && mon_print_fail_status(pMs))
|
||||
{
|
||||
mon_log_connect_error(pMs, rval);
|
||||
}
|
||||
}
|
||||
|
||||
if (mon_status_changed(pMs) || mon_print_fail_status(pMs))
|
||||
{
|
||||
|
@ -56,35 +56,8 @@ void AuroraMonitor::destroy()
|
||||
*/
|
||||
void AuroraMonitor::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))
|
||||
{
|
||||
monitor_clear_pending_status(monitored_server, SERVER_RUNNING);
|
||||
|
||||
if (mysql_errno(monitored_server->con) == ER_ACCESS_DENIED_ERROR)
|
||||
{
|
||||
monitor_set_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||
}
|
||||
else
|
||||
{
|
||||
monitor_clear_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||
}
|
||||
|
||||
monitored_server->server->node_id = -1;
|
||||
|
||||
if (mon_status_changed(monitored_server) && mon_print_fail_status(monitored_server))
|
||||
{
|
||||
mon_log_connect_error(monitored_server, rval);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
monitor_clear_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||
monitor_set_pending_status(monitored_server, SERVER_RUNNING);
|
||||
|
||||
monitor_clear_pending_status(monitored_server, SERVER_MASTER | SERVER_SLAVE);
|
||||
|
||||
MYSQL_RES *result;
|
||||
|
||||
/** Connection is OK, query for replica status */
|
||||
|
@ -262,34 +262,6 @@ 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))
|
||||
{
|
||||
monitor_clear_pending_status(monitored_server, SERVER_RUNNING);
|
||||
|
||||
if (mysql_errno(monitored_server->con) == ER_ACCESS_DENIED_ERROR)
|
||||
{
|
||||
monitor_set_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||
}
|
||||
else
|
||||
{
|
||||
monitor_clear_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||
}
|
||||
|
||||
monitored_server->server->node_id = -1;
|
||||
|
||||
if (mon_status_changed(monitored_server) && mon_print_fail_status(monitored_server))
|
||||
{
|
||||
mon_log_connect_error(monitored_server, rval);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
monitor_clear_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||
monitor_set_pending_status(monitored_server, SERVER_RUNNING);
|
||||
|
||||
MYSQL_ROW row;
|
||||
MYSQL_RES *result;
|
||||
char *server_string;
|
||||
|
@ -127,34 +127,6 @@ static bool is_slave(MXS_MONITORED_SERVER* server)
|
||||
|
||||
void GRMon::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))
|
||||
{
|
||||
monitor_clear_pending_status(monitored_server, SERVER_RUNNING);
|
||||
|
||||
if (mysql_errno(monitored_server->con) == ER_ACCESS_DENIED_ERROR)
|
||||
{
|
||||
monitor_set_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||
}
|
||||
else
|
||||
{
|
||||
monitor_clear_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||
}
|
||||
|
||||
monitored_server->server->node_id = -1;
|
||||
|
||||
if (mon_status_changed(monitored_server) && mon_print_fail_status(monitored_server))
|
||||
{
|
||||
mon_log_connect_error(monitored_server, rval);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
monitor_clear_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||
monitor_set_pending_status(monitored_server, SERVER_RUNNING);
|
||||
|
||||
if (is_master(monitored_server))
|
||||
{
|
||||
monitor_set_pending_status(monitored_server, SERVER_MASTER);
|
||||
|
@ -146,34 +146,6 @@ json_t* MMMonitor::diagnostics_json() const
|
||||
*/
|
||||
void MMMonitor::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))
|
||||
{
|
||||
monitor_clear_pending_status(monitored_server, SERVER_RUNNING);
|
||||
|
||||
if (mysql_errno(monitored_server->con) == ER_ACCESS_DENIED_ERROR)
|
||||
{
|
||||
monitor_set_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||
}
|
||||
else
|
||||
{
|
||||
monitor_clear_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||
}
|
||||
|
||||
monitored_server->server->node_id = -1;
|
||||
|
||||
if (mon_status_changed(monitored_server) && mon_print_fail_status(monitored_server))
|
||||
{
|
||||
mon_log_connect_error(monitored_server, rval);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
monitor_clear_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||
monitor_set_pending_status(monitored_server, SERVER_RUNNING);
|
||||
|
||||
MYSQL_ROW row;
|
||||
MYSQL_RES *result;
|
||||
int isslave = 0;
|
||||
|
@ -129,34 +129,6 @@ static json_t* diagnostics_json(const MXS_MONITOR_INSTANCE *mon)
|
||||
*/
|
||||
void NDBCMonitor::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))
|
||||
{
|
||||
monitor_clear_pending_status(monitored_server, SERVER_RUNNING);
|
||||
|
||||
if (mysql_errno(monitored_server->con) == ER_ACCESS_DENIED_ERROR)
|
||||
{
|
||||
monitor_set_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||
}
|
||||
else
|
||||
{
|
||||
monitor_clear_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||
}
|
||||
|
||||
monitored_server->server->node_id = -1;
|
||||
|
||||
if (mon_status_changed(monitored_server) && mon_print_fail_status(monitored_server))
|
||||
{
|
||||
mon_log_connect_error(monitored_server, rval);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
monitor_clear_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||
monitor_set_pending_status(monitored_server, SERVER_RUNNING);
|
||||
|
||||
MYSQL_ROW row;
|
||||
MYSQL_RES *result;
|
||||
int isjoined = 0;
|
||||
|
Reference in New Issue
Block a user