]> git.ipfire.org Git - thirdparty/haproxy.git/commit
MEDIUM: stconn/muxes: Loop on data fast-forwarding to forward at least a buffer
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 7 Nov 2023 09:44:06 +0000 (10:44 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Wed, 8 Nov 2023 20:14:07 +0000 (21:14 +0100)
commit4be0c7c655d96dd5af0253781446c24d5fde55f4
tree660be73b2759282022bb2998322a1e51214fee4e
parenta57f2a5cfe9f04f8efe8e1a0572e61753d545f4b
MEDIUM: stconn/muxes: Loop on data fast-forwarding to forward at least a buffer

In the mux-to-mux data forwarding, we now try, as far as possible to send at
least a buffer. Of course, if the consumer side is congested or if nothing
more can be received, we leave. But the idea is to retry to fast-forward
data if less than a buffer was forwarded. It is only performed for buffer
fast-forwarding, not splicing.

The idea behind this patch is to optimise the forwarding, when a first
forward was performed to complete a buffer with some existing data. In this
case, the amount of data forwarded is artificially limited because we are
using a non-empty buffer. But without this limitation, it is highly probable
that a full buffer could have been sent. And indeed, with H2 client, a
significant improvement was observed during our test.

To do so, .done_fastfwd() callback function must be able to deal with
interim forwards. Especially for the H2 mux, to remove H2_SF_NOTIFIED flags
on the H2S on the last call only. Otherwise, the H2 stream can be blocked by
itself because it is in the send_list. IOBUF_FL_INTERIM_FF iobuf flag is
used to notify the consumer it is not the last call. This flag is then
removed on the last call.
include/haproxy/stconn-t.h
src/mux_h1.c
src/mux_h2.c