Do hangups only after server states have been updated
The hangup code was refactored into a common function which should only be used after the server states have been updated. This will remove erroneus connections to already failed servers.
This commit is contained in:
@ -1055,3 +1055,16 @@ void mon_log_state_change(MONITOR_SERVERS *ptr)
|
|||||||
free(prev);
|
free(prev);
|
||||||
free(next);
|
free(next);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mon_hangup_failed_servers(MONITOR *monitor)
|
||||||
|
{
|
||||||
|
for (MONITOR_SERVERS *ptr = monitor->databases; ptr; ptr = ptr->next)
|
||||||
|
{
|
||||||
|
if (mon_status_changed(ptr) &&
|
||||||
|
(!(SERVER_IS_RUNNING(ptr->server)) ||
|
||||||
|
!(SERVER_IS_IN_CLUSTER(ptr->server))))
|
||||||
|
{
|
||||||
|
dcb_hangup_foreach(ptr->server);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -222,4 +222,13 @@ connect_result_t mon_connect_to_db(MONITOR* mon, MONITOR_SERVERS *database);
|
|||||||
void mon_log_connect_error(MONITOR_SERVERS* database, connect_result_t rval);
|
void mon_log_connect_error(MONITOR_SERVERS* database, connect_result_t rval);
|
||||||
void mon_log_state_change(MONITOR_SERVERS *ptr);
|
void mon_log_state_change(MONITOR_SERVERS *ptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hangup connections to failed servers
|
||||||
|
*
|
||||||
|
* Injects hangup events for DCB that are connected to servers that are down.
|
||||||
|
*
|
||||||
|
* @param monitor Monitor object
|
||||||
|
*/
|
||||||
|
void mon_hangup_failed_servers(MONITOR *monitor);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -538,16 +538,9 @@ monitorMain(void *arg)
|
|||||||
STRSRVSTATUS(ptr->server));
|
STRSRVSTATUS(ptr->server));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(SERVER_IS_RUNNING(ptr->server)) ||
|
|
||||||
!(SERVER_IS_IN_CLUSTER(ptr->server)))
|
|
||||||
{
|
|
||||||
dcb_hangup_foreach(ptr->server);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SERVER_IS_DOWN(ptr->server))
|
if (SERVER_IS_DOWN(ptr->server))
|
||||||
{
|
{
|
||||||
/** Increase this server'e error count */
|
/** Increase this server'e error count */
|
||||||
dcb_hangup_foreach(ptr->server);
|
|
||||||
ptr->mon_err_count += 1;
|
ptr->mon_err_count += 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -653,6 +646,8 @@ monitorMain(void *arg)
|
|||||||
}
|
}
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mon_hangup_failed_servers(mon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -599,15 +599,6 @@ monitorMain(void *arg)
|
|||||||
/* monitor current node */
|
/* monitor current node */
|
||||||
monitorDatabase(mon, ptr);
|
monitorDatabase(mon, ptr);
|
||||||
|
|
||||||
if (mon_status_changed(ptr))
|
|
||||||
{
|
|
||||||
if (!(SERVER_IS_RUNNING(ptr->server)) ||
|
|
||||||
!(SERVER_IS_IN_CLUSTER(ptr->server)))
|
|
||||||
{
|
|
||||||
dcb_hangup_foreach(ptr->server);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mon_status_changed(ptr) ||
|
if (mon_status_changed(ptr) ||
|
||||||
mon_print_fail_status(ptr))
|
mon_print_fail_status(ptr))
|
||||||
{
|
{
|
||||||
@ -679,6 +670,8 @@ monitorMain(void *arg)
|
|||||||
}
|
}
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mon_hangup_failed_servers(mon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -860,22 +860,6 @@ monitorMain(void *arg)
|
|||||||
ptr->server->name,
|
ptr->server->name,
|
||||||
ptr->server->port);
|
ptr->server->port);
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* Here we say: If the server's state changed
|
|
||||||
* so that it isn't running or some other way
|
|
||||||
* lost cluster membership, call call-back function
|
|
||||||
* of every DCB for which such callback was
|
|
||||||
* registered for this kind of issue (DCB_REASON_...)
|
|
||||||
*/
|
|
||||||
if (!(SERVER_IS_RUNNING(ptr->server)) ||
|
|
||||||
!(SERVER_IS_IN_CLUSTER(ptr->server)))
|
|
||||||
{
|
|
||||||
dcb_hangup_foreach(ptr->server);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mon_status_changed(ptr))
|
if (mon_status_changed(ptr))
|
||||||
@ -1090,6 +1074,8 @@ monitorMain(void *arg)
|
|||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mon_hangup_failed_servers(mon);
|
||||||
} /*< while (1) */
|
} /*< while (1) */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -447,6 +447,8 @@ monitorMain(void *arg)
|
|||||||
}
|
}
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mon_hangup_failed_servers(mon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user