MEDIUM: Add helper function for failed checks

This consolidates some logic in preparation for enhancing it.

Signed-off-by: Simon Horman <horms@verge.net.au>
This commit is contained in:
Simon Horman 2013-11-25 10:46:33 +09:00 committed by Willy Tarreau
parent 5c9424258e
commit d858306ddb

View File

@ -603,6 +603,18 @@ static void set_server_enabled(struct check *check) {
set_server_enabled(check); set_server_enabled(check);
} }
static void check_failed(struct check *check)
{
struct server *s = check->server;
if (check->health > s->rise) {
check->health--; /* still good */
s->counters.failed_checks++;
}
else
set_server_down(check);
}
void health_adjust(struct server *s, short status) void health_adjust(struct server *s, short status)
{ {
int failed; int failed;
@ -660,13 +672,7 @@ void health_adjust(struct server *s, short status)
case HANA_ONERR_FAILCHK: case HANA_ONERR_FAILCHK:
/* simulate a failed health check */ /* simulate a failed health check */
set_server_check_status(&s->check, HCHK_STATUS_HANA, trash.str); set_server_check_status(&s->check, HCHK_STATUS_HANA, trash.str);
check_failed(&s->check);
if (s->check.health > s->rise) {
s->check.health--; /* still good */
s->counters.failed_checks++;
}
else
set_server_down(&s->check);
break; break;
@ -1397,12 +1403,7 @@ static struct task *process_chk(struct task *t)
/* here, we have seen a synchronous error, no fd was allocated */ /* here, we have seen a synchronous error, no fd was allocated */
check->state &= ~CHK_STATE_RUNNING; check->state &= ~CHK_STATE_RUNNING;
if (check->health > s->rise) { check_failed(check);
check->health--; /* still good */
s->counters.failed_checks++;
}
else
set_server_down(check);
/* we allow up to min(inter, timeout.connect) for a connection /* we allow up to min(inter, timeout.connect) for a connection
* to establish but only when timeout.check is set * to establish but only when timeout.check is set
@ -1470,14 +1471,8 @@ static struct task *process_chk(struct task *t)
conn_full_close(conn); conn_full_close(conn);
} }
if (check->result & SRV_CHK_FAILED) { /* a failure or timeout detected */ if (check->result & SRV_CHK_FAILED) /* a failure or timeout detected */
if (check->health > s->rise) { check_failed(check);
check->health--; /* still good */
s->counters.failed_checks++;
}
else
set_server_down(check);
}
else { /* check was OK */ else { /* check was OK */
/* we may have to add/remove this server from the LB group */ /* we may have to add/remove this server from the LB group */
if ((s->state & SRV_RUNNING) && (s->proxy->options & PR_O_DISABLE404)) { if ((s->state & SRV_RUNNING) && (s->proxy->options & PR_O_DISABLE404)) {