mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 22:31:28 +02:00
Connection flow-control level calculation is a bit complicated. To ensure it is never exceeded, each time a transfer occurs from a qcs.tx.buf to its qc_stream_desc buffer it is accounted in qcc.tx.offsets at the connection level. This value is not decremented even if the corresponding STREAM frame is rejected by the quic-conn layer as its emission will be retried later. In normal cases this works as expected. However there is an issue if a qcs instance is removed with prepared data left. In this case, its data is still accounted in qcc.tx.offsets despite being removed which may block other streams. This happens every time a qcs is reset with remaining data which will be discarded in favor of a RESET_STREAM frame. To fix this, if a stream has prepared data in qcc_reset_stream(), it is decremented from qcc.tx.offsets. A BUG_ON() has been added to ensure qcs_destroy() is never called for a stream with prepared data left. This bug can cause two issues : * transfer freeze as data unsent from closed streams still count on the connection flow-control limit and will block other streams. Note that this issue was not reproduced so it's unsure if this really happens without the following issue first. * a crash on a BUG_ON() statement in qc_send() loop over qc_send_frames(). Streams may remained in the send list with nothing to send due to connection flow-control limit. However, limit is never reached through qcc_streams_sent_done() so QC_CF_BLK_MFCTL flag is not set which will allow the loop to continue. The last case was reproduced after several minutes of testing using the following command : $ ngtcp2-client --exit-on-all-streams-close -t 0.1 -r 0.1 \ --max-data=100K -n32 \ 127.0.0.1 20443 "https://127.0.0.1:20443/?s=1g" 2>/dev/null This should fix github issues #2049 and #2074.
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.1%
Shell
0.8%
Makefile
0.5%
Lua
0.2%
Python
0.2%