mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-01-29 22:11:18 +01:00
The flow control enforced at connection level is incorrectly calculated. There is a risk of exceeding the limit. In most cases, this results in a segfault produced by a BUG_ON which is here to catch this kind of error. If not compiled with DEBUG_STRICT, this should generate a connection closed by the client due to the flow control overflow. The problem is encountered when transfered payload is big enough to fill the transport congestion window. In this case, some data are rejected by the transport layer and kept by the MUX to be reemitted later. However, these preserved data are not counted on the connection flow control when resubmitted, which gradually amplify the gap between expected and real consumed flow control. To fix this, handle the flow-control at the connection level in the same way as the stream level. A new field qcc.tx.offsets is incremented as soon as data are transfered between stream TX buffers. The field qcc.tx.sent_offsets is preserved to count bytes handled by the transport layer and stop the MUX transfer if limit is reached. As already stated, this bug can occur during transfers with enough emitted data, over multiple streams. When using a single stream, the flow control at the stream level hides it. The BUG_ON crash is reproduced systematically with quiche client : $ quiche-client --no-verify --http-version HTTP/3 -n 10000 https://127.0.0.1:20443/10K This must be backported up to 2.6 when confirmed to work as expected. This should fix github issue #1738.
The HAProxy documentation has been split into a number of different files for ease of use. Please refer to the following files depending on what you're looking for : - INSTALL for instructions on how to build and install HAProxy - BRANCHES to understand the project's life cycle and what version to use - LICENSE for the project's license - CONTRIBUTING for the process to follow to submit contributions The more detailed documentation is located into the doc/ directory : - doc/intro.txt for a quick introduction on HAProxy - doc/configuration.txt for the configuration's reference manual - doc/lua.txt for the Lua's reference manual - doc/SPOE.txt for how to use the SPOE engine - doc/network-namespaces.txt for how to use network namespaces under Linux - doc/management.txt for the management guide - doc/regression-testing.txt for how to use the regression testing suite - doc/peers.txt for the peers protocol reference - doc/coding-style.txt for how to adopt HAProxy's coding style - doc/internals for developer-specific documentation (not all up to date)
Description
Languages
C
98%
Shell
0.9%
Makefile
0.5%
Lua
0.2%
Python
0.2%