]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG: compression: disable auto-close and enable MSG_MORE during transfer
authorWilly Tarreau <w@1wt.eu>
Fri, 26 Oct 2012 23:36:34 +0000 (01:36 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 26 Oct 2012 23:36:34 +0000 (01:36 +0200)
We don't want the lower layer to forward a close while we're compressing,
and we want the system to fuse outgoing TCP segments using MSG_MORE as
much as possible to save round trips that can emerge from sending short
packets with a PUSH flag.

A test on a remote busy DSL line consisting in compressing a 100MB file
on the fly full of zeroes only showed a transfer rate of a few kB/s due
to these round trips.

src/proto_http.c

index 6167f1f175929c48cab5215e356f1e8711e63e1c..e8046a505877f23b2a25824754754caa1fca6f33 100644 (file)
@@ -5729,7 +5729,7 @@ int http_response_forward_body(struct session *s, struct channel *res, int an_bi
         * Similarly, with keep-alive on the client side, we don't want to forward a
         * close.
         */
-       if ((msg->flags & HTTP_MSGF_TE_CHNK) ||
+       if ((msg->flags & HTTP_MSGF_TE_CHNK) || s->comp_algo ||
            (txn->flags & TX_CON_WANT_MSK) == TX_CON_WANT_KAL ||
            (txn->flags & TX_CON_WANT_MSK) == TX_CON_WANT_SCL)
                channel_dont_close(res);
@@ -5742,7 +5742,7 @@ int http_response_forward_body(struct session *s, struct channel *res, int an_bi
         * flag with the last block of forwarded data, which would cause an
         * additional delay to be observed by the receiver.
         */
-       if (msg->flags & HTTP_MSGF_TE_CHNK)
+       if ((msg->flags & HTTP_MSGF_TE_CHNK) || s->comp_algo)
                res->flags |= CF_EXPECT_MORE;
 
        /* the session handler will take care of timeouts and errors */