mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-05-04 20:46:11 +02:00
MEDIUM: session: redispatch earlier when possible
As discussed with Dmitry Sivachenko, is a server farm has more than one active server, uses a guaranteed non-determinist algorithm (round robin), and a connection was initiated from a non-persistent connection, there's no point insisting to reconnect to the same server after a connect failure, better redispatch upon the very first retry instead of insisting on the same server multiple times.
This commit is contained in:
parent
db6d012270
commit
33a14e515b
@ -879,8 +879,15 @@ static int sess_update_st_cer(struct session *s, struct stream_interface *si)
|
||||
* we must mark the session unassigned, and eventually clear the DIRECT
|
||||
* bit to ignore any persistence cookie. We won't count a retry nor a
|
||||
* redispatch yet, because this will depend on what server is selected.
|
||||
* If the connection is not persistent, the balancing algorithm is not
|
||||
* determinist (round robin) and there is more than one active server,
|
||||
* we accept to perform an immediate redispatch without waiting since
|
||||
* we don't care about this particular server.
|
||||
*/
|
||||
if (objt_server(s->target) && si->conn_retries == 0 &&
|
||||
if (objt_server(s->target) &&
|
||||
(si->conn_retries == 0 ||
|
||||
(!(s->flags & SN_DIRECT) && s->be->srv_act > 1 &&
|
||||
((s->be->lbprm.algo & BE_LB_KIND) == BE_LB_KIND_RR))) &&
|
||||
s->be->options & PR_O_REDISP && !(s->flags & SN_FORCE_PRST)) {
|
||||
sess_change_server(s, NULL);
|
||||
if (may_dequeue_tasks(objt_server(s->target), s->be))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user