[BUG] dynamic connection throttling could return a max of zero conns

srv_dynamic_maxconn() is clearly documented as returning at least 1
possible connection under throttling. But the computation was wrong,
the minimum 1 was divided and got lost in case of very low maxconns.

Apply the MAX(1, max) before returning the result in order to ensure
that a newly appeared server will get some traffic.
(cherry picked from commit 819970098f)
This commit is contained in:
Willy Tarreau 2008-09-14 17:43:27 +02:00
parent 43662ff35d
commit 28a9e529f8

View File

@ -52,8 +52,8 @@ unsigned int srv_dynamic_maxconn(const struct server *s)
now.tv_sec < s->last_change + s->slowstart &&
now.tv_sec >= s->last_change) {
unsigned int ratio;
ratio = MAX(1, 100 * (now.tv_sec - s->last_change) / s->slowstart);
max = max * ratio / 100;
ratio = 100 * (now.tv_sec - s->last_change) / s->slowstart;
max = MAX(1, max * ratio / 100);
}
return max;
}