BUG/MEDIUM: backend: prefer-last-server breaks redispatch

Since 1.5-dev20, we have a working server-side keep-alive and an option
"prefer-last-server" to indicate that we explicitly want to reuse the
same server as the last one. Unfortunately this breaks the redispatch
feature because assign_server() insists on reusing the same server as
the first one attempted even if the connection failed to establish.

A simple solution consists in only considering the last connection if
it was connected. Otherwise there is no reason for being interested in
reusing the same server.
This commit is contained in:
Willy Tarreau 2014-02-19 18:40:43 +01:00
parent 653dcd64da
commit 2481d167ef
1 changed files with 1 additions and 0 deletions

View File

@ -543,6 +543,7 @@ int assign_server(struct session *s)
conn = objt_conn(s->req->cons->end);
if (conn &&
(conn->flags & CO_FL_CONNECTED) &&
((s->be->options & PR_O_PREF_LAST) || (s->txn.flags & TX_PREFER_LAST)) &&
objt_server(conn->target) && __objt_server(conn->target)->proxy == s->be &&
srv_is_usable(__objt_server(conn->target)->state, __objt_server(conn->target)->eweight)) {