MXS-1775 Provide default implementation for MonitorInstance::tick
This commit is contained in:
@ -70,8 +70,13 @@ protected:
|
||||
* This function is called once per monitor round, and the concrete
|
||||
* implementation should probe all servers, i.e. call @c update_server_status
|
||||
* on each server.
|
||||
*
|
||||
* The default implementation will:
|
||||
* - Not call @update_server_status for a server that is in maintenance.
|
||||
* - Before calling, update the previous status of the server.
|
||||
* - After the call, update the error count of the server.
|
||||
*/
|
||||
virtual void tick() = 0;
|
||||
virtual void tick();
|
||||
|
||||
MXS_MONITOR* m_monitor; /**< The generic monitor structure. */
|
||||
MXS_MONITORED_SERVER* m_master; /**< Master server */
|
||||
|
@ -2635,6 +2635,37 @@ void MonitorInstance::configure(const MXS_CONFIG_PARAMETER* pParams)
|
||||
{
|
||||
}
|
||||
|
||||
void MonitorInstance::tick()
|
||||
{
|
||||
for (MXS_MONITORED_SERVER *pMs = m_monitor->monitored_servers; pMs; pMs = pMs->next)
|
||||
{
|
||||
if (!SERVER_IN_MAINT(pMs->server))
|
||||
{
|
||||
pMs->mon_prev_status = pMs->server->status;
|
||||
pMs->pending_status = pMs->server->status;
|
||||
|
||||
update_server_status(pMs);
|
||||
|
||||
if (mon_status_changed(pMs) || mon_print_fail_status(pMs))
|
||||
{
|
||||
MXS_DEBUG("Backend server [%s]:%d state : %s",
|
||||
pMs->server->address,
|
||||
pMs->server->port,
|
||||
STRSRVSTATUS(pMs->server));
|
||||
}
|
||||
|
||||
if (SERVER_IS_DOWN(pMs->server))
|
||||
{
|
||||
pMs->mon_err_count += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
pMs->mon_err_count = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MonitorInstance::main()
|
||||
{
|
||||
load_server_journal(m_monitor, &m_master);
|
||||
|
@ -56,13 +56,10 @@ void AuroraMonitor::destroy()
|
||||
*/
|
||||
void AuroraMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server)
|
||||
{
|
||||
if (!SERVER_IN_MAINT(monitored_server->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);
|
||||
monitored_server->mon_prev_status = monitored_server->server->status;
|
||||
|
||||
/** Try to connect to or ping the database */
|
||||
mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, monitored_server);
|
||||
@ -111,15 +108,6 @@ void AuroraMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server)
|
||||
}
|
||||
|
||||
server_transfer_status(monitored_server->server, &temp_server);
|
||||
}
|
||||
}
|
||||
|
||||
void AuroraMonitor::tick()
|
||||
{
|
||||
for (MXS_MONITORED_SERVER *ptr = m_monitor->monitored_servers; ptr; ptr = ptr->next)
|
||||
{
|
||||
update_server_status(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
bool AuroraMonitor::has_sufficient_permissions() const
|
||||
|
@ -39,5 +39,4 @@ private:
|
||||
|
||||
bool has_sufficient_permissions() const;
|
||||
void configure(const MXS_CONFIG_PARAMETER* params);
|
||||
void tick();
|
||||
};
|
||||
|
@ -266,15 +266,6 @@ void GaleraMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server)
|
||||
MYSQL_RES *result;
|
||||
char *server_string;
|
||||
|
||||
/* Don't even probe server flagged as in maintenance */
|
||||
if (SERVER_IN_MAINT(monitored_server->server))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/** Store previous status */
|
||||
monitored_server->mon_prev_status = monitored_server->server->status;
|
||||
|
||||
mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, monitored_server);
|
||||
if (!mon_connection_is_ok(rval))
|
||||
{
|
||||
@ -445,39 +436,10 @@ void GaleraMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server)
|
||||
|
||||
void GaleraMonitor::tick()
|
||||
{
|
||||
MonitorInstance::tick();
|
||||
|
||||
int is_cluster = 0;
|
||||
|
||||
MXS_MONITORED_SERVER* ptr = m_monitor->monitored_servers;
|
||||
while (ptr)
|
||||
{
|
||||
ptr->mon_prev_status = ptr->server->status;
|
||||
|
||||
update_server_status(ptr);
|
||||
|
||||
/* Log server status change */
|
||||
if (mon_status_changed(ptr))
|
||||
{
|
||||
MXS_DEBUG("Backend server [%s]:%d state : %s",
|
||||
ptr->server->address,
|
||||
ptr->server->port,
|
||||
STRSRVSTATUS(ptr->server));
|
||||
}
|
||||
|
||||
if (SERVER_IS_DOWN(ptr->server))
|
||||
{
|
||||
/** Increase this server'e error count */
|
||||
ptr->mon_err_count += 1;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
/** Reset this server's error count */
|
||||
ptr->mon_err_count = 0;
|
||||
}
|
||||
|
||||
ptr = ptr->next;
|
||||
}
|
||||
|
||||
/* Try to set a Galera cluster based on
|
||||
* UUID and cluster_size each node reports:
|
||||
* no multiple clusters UUID are allowed.
|
||||
@ -496,7 +458,7 @@ void GaleraMonitor::tick()
|
||||
|
||||
m_master = set_cluster_master(m_master, candidate_master, m_disableMasterFailback);
|
||||
|
||||
ptr = m_monitor->monitored_servers;
|
||||
MXS_MONITORED_SERVER *ptr = m_monitor->monitored_servers;
|
||||
|
||||
while (ptr)
|
||||
{
|
||||
|
@ -127,15 +127,6 @@ static bool is_slave(MXS_MONITORED_SERVER* server)
|
||||
|
||||
void GRMon::update_server_status(MXS_MONITORED_SERVER* monitored_server)
|
||||
{
|
||||
/* Don't even probe server flagged as in maintenance */
|
||||
if (SERVER_IN_MAINT(monitored_server->server))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/** Store previous status */
|
||||
monitored_server->mon_prev_status = monitored_server->server->status;
|
||||
|
||||
mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, monitored_server);
|
||||
|
||||
if (!mon_connection_is_ok(rval))
|
||||
@ -181,14 +172,6 @@ void GRMon::update_server_status(MXS_MONITORED_SERVER* monitored_server)
|
||||
}
|
||||
}
|
||||
|
||||
void GRMon::tick()
|
||||
{
|
||||
for (MXS_MONITORED_SERVER *ptr = m_monitor->monitored_servers; ptr; ptr = ptr->next)
|
||||
{
|
||||
update_server_status(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The module entry point routine. It is this routine that
|
||||
* must populate the structure that is referred to as the
|
||||
|
@ -39,5 +39,4 @@ private:
|
||||
|
||||
bool has_sufficient_permissions() const;
|
||||
void configure(const MXS_CONFIG_PARAMETER* params);
|
||||
void tick();
|
||||
};
|
||||
|
@ -153,14 +153,6 @@ void MMMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server)
|
||||
unsigned long int server_version = 0;
|
||||
char *server_string;
|
||||
|
||||
/* Don't probe servers in maintenance mode */
|
||||
if (SERVER_IN_MAINT(monitored_server->server))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/** Store previous status */
|
||||
monitored_server->mon_prev_status = monitored_server->server->status;
|
||||
mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, monitored_server);
|
||||
|
||||
if (!mon_connection_is_ok(rval))
|
||||
@ -433,45 +425,14 @@ void MMMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server)
|
||||
|
||||
void MMMonitor::tick()
|
||||
{
|
||||
/* start from the first server in the list */
|
||||
MXS_MONITORED_SERVER* ptr = m_monitor->monitored_servers;
|
||||
|
||||
while (ptr)
|
||||
{
|
||||
/* copy server status into monitor pending_status */
|
||||
ptr->pending_status = ptr->server->status;
|
||||
|
||||
/* monitor current node */
|
||||
update_server_status(ptr);
|
||||
|
||||
if (mon_status_changed(ptr) ||
|
||||
mon_print_fail_status(ptr))
|
||||
{
|
||||
MXS_DEBUG("Backend server [%s]:%d state : %s",
|
||||
ptr->server->address,
|
||||
ptr->server->port,
|
||||
STRSRVSTATUS(ptr->server));
|
||||
}
|
||||
if (SERVER_IS_DOWN(ptr->server))
|
||||
{
|
||||
/** Increase this server'e error count */
|
||||
ptr->mon_err_count += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/** Reset this server's error count */
|
||||
ptr->mon_err_count = 0;
|
||||
}
|
||||
|
||||
ptr = ptr->next;
|
||||
}
|
||||
MonitorInstance::tick();
|
||||
|
||||
/* Get Master server pointer */
|
||||
MXS_MONITORED_SERVER *root_master = get_current_master();
|
||||
|
||||
/* Update server status from monitor pending status on that server*/
|
||||
|
||||
ptr = m_monitor->monitored_servers;
|
||||
MXS_MONITORED_SERVER *ptr = m_monitor->monitored_servers;
|
||||
while (ptr)
|
||||
{
|
||||
if (!SERVER_IN_MAINT(ptr->server))
|
||||
|
@ -134,12 +134,6 @@ void NDBCMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server)
|
||||
int isjoined = 0;
|
||||
char *server_string;
|
||||
|
||||
/* Don't even probe server flagged as in maintenance */
|
||||
if (SERVER_IN_MAINT(monitored_server->server))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, monitored_server);
|
||||
if (!mon_connection_is_ok(rval))
|
||||
{
|
||||
@ -236,24 +230,3 @@ void NDBCMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server)
|
||||
monitored_server->server->depth = -1;
|
||||
}
|
||||
}
|
||||
|
||||
void NDBCMonitor::tick()
|
||||
{
|
||||
MXS_MONITORED_SERVER *ptr = m_monitor->monitored_servers;
|
||||
while (ptr)
|
||||
{
|
||||
ptr->mon_prev_status = ptr->server->status;
|
||||
update_server_status(ptr);
|
||||
|
||||
if (ptr->server->status != ptr->mon_prev_status ||
|
||||
SERVER_IS_DOWN(ptr->server))
|
||||
{
|
||||
MXS_DEBUG("Backend server [%s]:%d state : %s",
|
||||
ptr->server->address,
|
||||
ptr->server->port,
|
||||
STRSRVSTATUS(ptr->server));
|
||||
}
|
||||
|
||||
ptr = ptr->next;
|
||||
}
|
||||
}
|
||||
|
@ -41,5 +41,4 @@ private:
|
||||
|
||||
bool has_sufficient_permissions() const;
|
||||
void configure(const MXS_CONFIG_PARAMETER* params);
|
||||
void tick();
|
||||
};
|
||||
|
Reference in New Issue
Block a user