From bbbc2deb29d5ca793c80c27c07b2e49f2fcfb879 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Sun, 14 Oct 2007 23:47:04 +0200 Subject: [PATCH] [MINOR] spread checks also when the server is OK. Initial patch only managed to spread the checks when the checks failed. The randomization code needs to be added also in the path where the server is going fine. --- src/checks.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/checks.c b/src/checks.c index 57242f11e..cd6bd3007 100644 --- a/src/checks.c +++ b/src/checks.c @@ -491,8 +491,14 @@ void process_chk(struct task *t, struct timeval *next) } s->curfd = -1; /* no check running anymore */ fd_delete(fd); - while (tv_isle(&t->expire, &now)) - tv_ms_add(&t->expire, &t->expire, s->inter); + + rv = 0; + if (global.spread_checks > 0) { + rv = s->inter * global.spread_checks / 100; + rv -= (int) (2 * rv * (rand() / (RAND_MAX + 1.0))); + //fprintf(stderr, "process_chk(%p): (%d+/-%d%%) random=%d\n", s, s->inter, global.spread_checks, rv); + } + tv_ms_add(&t->expire, &now, s->inter + rv); goto new_chk; } else if (s->result < 0 || tv_isle(&t->expire, &now)) { @@ -511,10 +517,9 @@ void process_chk(struct task *t, struct timeval *next) if (global.spread_checks > 0) { rv = s->inter * global.spread_checks / 100; rv -= (int) (2 * rv * (rand() / (RAND_MAX + 1.0))); - //fprintf(stderr, "process_chk: (%d+/-%d%%) random=%d\n", s->inter, global.spread_checks, rv); + //fprintf(stderr, "process_chk(%p): (%d+/-%d%%) random=%d\n", s, s->inter, global.spread_checks, rv); } - while (tv_isle(&t->expire, &now)) - tv_ms_add(&t->expire, &t->expire, s->inter + rv); + tv_ms_add(&t->expire, &now, s->inter + rv); goto new_chk; } /* if result is 0 and there's no timeout, we have to wait again */ -- 2.47.3