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]
diff --git a/src/backend.c b/src/backend.c
index 3acb1da..bf70ee1 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -563,12 +563,14 @@
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);