mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-04-07 17:51:45 +00:00
BUG/MINOR: option prefer-last-server must be ignored in some case
when using "option prefer-last-server", we may not always stay on the same backend if option balance told us otherwise. For example, backend may change in the following cases: balance hdr() balance rdp-cookie balance source balance uri balance url_param [wt: backport this to 1.7 and 1.6]
This commit is contained in:
parent
f2592b29f1
commit
1ca1b6fe3c
@ -563,12 +563,14 @@ int assign_server(struct stream *s)
|
||||
objt_server(conn->target) && __objt_server(conn->target)->proxy == s->be &&
|
||||
((s->txn && s->txn->flags & TX_PREFER_LAST) ||
|
||||
((s->be->options & PR_O_PREF_LAST) &&
|
||||
(s->be->lbprm.algo & BE_LB_KIND) != BE_LB_KIND_HI &&
|
||||
(!s->be->max_ka_queue ||
|
||||
server_has_room(__objt_server(conn->target)) ||
|
||||
(__objt_server(conn->target)->nbpend + 1) < s->be->max_ka_queue))) &&
|
||||
srv_is_usable(__objt_server(conn->target))) {
|
||||
/* This stream was relying on a server in a previous request
|
||||
* and the proxy has "option prefer-last-server" set, so
|
||||
* and the proxy has "option prefer-last-server" set
|
||||
* and balance algorithm dont tell us to do otherwise, so
|
||||
* let's try to reuse the same server.
|
||||
*/
|
||||
srv = __objt_server(conn->target);
|
||||
|
Loading…
Reference in New Issue
Block a user