mirror of
https://github.com/haproxy/haproxy.git
synced 2026-04-15 21:59:41 -04:00
HAProxy - Load balancer
After emission/reception of a CONNECTION_CLOSE, a connection enters the CLOSING state. In this state, only minimal exchanges occurs as only the packets which containted the CONNECTION_CLOSE frame can be reemitted. In conformance with the RFC, most resources are released and quic_conn instance is converted to the lighter quic_cc_conn. Push further this optimization by closing quic_conn socket FD before switching to a quic_cc_conn. This means that quic_cc_conn will rely on listener socket for its send/recv operation. This should not impact performance as as stated input/output are minimal on this state. This patch should improve FD consumption as prior to this a socket FD was kept during the closing delay which could cause maxsock to be reached for other connections. Note that fd member is kept in QUIC_CONN_COMMON and not removed from quic_cc_conn. This is because quic_cc_conn relies on qc_snd_buf() which access this field. As a side-effect to this change, jobs accounting for quic_conn is also updated. quic_cc_conn instances are now not counted as jobs. Indeed, the main objective of jobs is to prevent haproxy process to be stopped with data truncation. However, this relies on the connection to uses its owned socket as the listener socket is shut down inconditionaly on shutdown. A consequence of the jobs handling change is that haproxy process will be closed if only quic_cc_conn instances are present, thus preventing to respect the closing state. In case of a reload, if a client missed a CONNECTION_CLOSE frame just before process shutdown, it will probably received a Stateless Reset on sending retry. This change is considered safe as, for now, haproxy only emits CONNECTION_CLOSE on error conditions (such as protocol violation or timeout). It is considered as expected to suffer from data truncation from this. However, if connection closing is reused by haproxy to implement clean shutdown, it should be necessary to delay CONNECTION_CLOSE frame emission to ensure no data truncation happens here. |
||
|---|---|---|
| .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)