mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 23:27:04 +02:00
There is a nego stage when a producer is ready to forward data to the other side. At this stage, the zero-copy forwarding may be disabled if the consumer does not support it. However, there is a flaw with this way to proceed. If the channel buffer is not empty, we delay the zero-copy forwarding to flush all data from the channel first. During this delay, receives on the endpoint (at connection level for muxes), are blocked to be sure to have the opportunity to switch on zero-copy forwarding. It is a problem if the consumer cannot flush data from the channel's buffer, waiting for more data for instance. It is especially annoying with the CLI applet, because this scenario can happen if a command is partially received. For instance without the LF at the end. In this case, the CLI applet is blocked because it waits more data. The frontend connexion is also blocked because channel's data must be flushed before trying to receive more data. Worst, this happen at where no timeout is armed. Thus the session is stuck infinitly, client aborts cannot be detected because receives are blocked, and the applet cannot abort on its side because there are pending outgoing data. It is clearly a situation where it is easy to consume all CLI slots. To fix the issue, thanks to previous commits, we now check zero-copy forwarding support on both sides before proceeding. This patch relies on the following commits: * MINOR: muxes: Announce support for zero-copy forwarding on consumer side * MINOR: stconn: Add SE flag to announce zero-copy forwarding on consumer side * MINOR: stconn: Rename SE_FL_MAY_FASTFWD and reorder bitfield * CLEANUP: stconn: Move SE flags set by app layer at the end of the bitfield All the series must be backported to 2.9. |
||
---|---|---|
.github | ||
addons | ||
admin | ||
dev | ||
doc | ||
examples | ||
include | ||
reg-tests | ||
scripts | ||
src | ||
tests | ||
.cirrus.yml | ||
.gitattributes | ||
.gitignore | ||
.mailmap | ||
.travis.yml | ||
BRANCHES | ||
BSDmakefile | ||
CHANGELOG | ||
CONTRIBUTING | ||
INSTALL | ||
LICENSE | ||
MAINTAINERS | ||
Makefile | ||
README | ||
SUBVERS | ||
VERDATE | ||
VERSION |
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)