From: Olivier Houchard Date: Fri, 28 Dec 2018 15:20:25 +0000 (+0100) Subject: MEDIUM: servers: Be smarter when switching connections. X-Git-Tag: v2.0-dev1~309 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c685d700fd233b7ddd2737039af0cc50b94df3b5;p=thirdparty%2Fhaproxy.git MEDIUM: servers: Be smarter when switching connections. When connecting to a server, and reusing a connection, always attempt to give the owner of the previous session one of its own connections, so that one session won't be responsible for too many connections. This should be backported to 1.9. --- diff --git a/src/backend.c b/src/backend.c index c4711ead88..b6f08d5e7a 100644 --- a/src/backend.c +++ b/src/backend.c @@ -1245,27 +1245,20 @@ int connect_server(struct stream *s) /* We're about to use another connection, let the mux know we're * done with this one */ - if (old_conn != srv_conn || !reuse) { - - if (srv_conn && reuse) { - struct session *sess = srv_conn->owner; - - if (sess) { - if (old_conn && - !(old_conn->flags & CO_FL_PRIVATE) && - old_conn->mux != NULL && - (old_conn->mux->avail_streams(old_conn) > 0) && - (srv_conn->mux->avail_streams(srv_conn) == 1)) { - session_unown_conn(s->sess, old_conn); - old_conn->owner = sess; - if (!session_add_conn(sess, old_conn, s->target)) { - old_conn->owner = NULL; - old_conn->mux->destroy(old_conn); - } else - session_check_idle_conn(sess, old_conn); - } + if (old_conn != srv_conn && old_conn && reuse && !reuse_orphan) { + struct session *sess = srv_conn->owner; + + if (sess) { + if (old_conn && !(old_conn->flags & CO_FL_PRIVATE) && + old_conn->mux != NULL) { + session_unown_conn(s->sess, old_conn); + old_conn->owner = sess; + if (!session_add_conn(sess, old_conn, s->target)) { + old_conn->owner = NULL; + old_conn->mux->destroy(old_conn); + } else + session_check_idle_conn(sess, old_conn); } - } }