]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: backend: prefer-last-server breaks redispatch
authorWilly Tarreau <w@1wt.eu>
Wed, 19 Feb 2014 17:40:43 +0000 (18:40 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 24 Feb 2014 12:21:32 +0000 (13:21 +0100)
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.

src/backend.c

index e561919b016f3e5d1b1cb6ff5d4abf65d7c02559..c9fe11e4426781e0e94f8f26e4a7825f8c44d2f0 100644 (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)) {