mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 07:07:04 +02:00
MAJOR: backend: enable connection reuse
This commit allows an existing server-side connection to be reused if it matches the same target. Basic controls are performed ; right now we do not allow to reuse a connection when dynamic source binding is in use or when the destination address or port is dynamic (eg: proxy mode). Later we'll have to also disable connection sharing when PROXY protocol is being used or when non-idempotent requests are processed.
This commit is contained in:
parent
4213a11df9
commit
34601a8f98
@ -982,10 +982,33 @@ static void assign_tproxy_address(struct session *s)
|
||||
int connect_server(struct session *s)
|
||||
{
|
||||
struct connection *cli_conn;
|
||||
struct connection *srv_conn = si_alloc_conn(s->req->cons, 0);
|
||||
struct connection *srv_conn;
|
||||
struct server *srv;
|
||||
int reuse = 0;
|
||||
int err;
|
||||
|
||||
srv_conn = objt_conn(s->req->cons->end);
|
||||
if (srv_conn)
|
||||
reuse = s->target == srv_conn->target;
|
||||
|
||||
if (reuse) {
|
||||
/* Disable connection reuse if a dynamic source is used.
|
||||
* As long as we don't share connections between servers,
|
||||
* we don't need to disable connection reuse on no-idempotent
|
||||
* requests nor when PROXY protocol is used.
|
||||
*/
|
||||
srv = objt_server(s->target);
|
||||
if (srv && srv->conn_src.opts & CO_SRC_BIND) {
|
||||
if ((srv->conn_src.opts & CO_SRC_TPROXY_MASK) == CO_SRC_TPROXY_DYN)
|
||||
reuse = 0;
|
||||
}
|
||||
else if (s->be->conn_src.opts & CO_SRC_BIND) {
|
||||
if ((s->be->conn_src.opts & CO_SRC_TPROXY_MASK) == CO_SRC_TPROXY_DYN)
|
||||
reuse = 0;
|
||||
}
|
||||
}
|
||||
|
||||
srv_conn = si_alloc_conn(s->req->cons, reuse);
|
||||
if (!srv_conn)
|
||||
return SN_ERR_RESOURCE;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user