haproxy public development tree
Go to file
Remi Tricot-Le Breton b5d968d9b2 MEDIUM: global: Add a "close-spread-time" option to spread soft-stop on time window
The new 'close-spread-time' global option can be used to spread idle and
active HTTP connction closing after a SIGUSR1 signal is received. This
allows to limit bursts of reconnections when too many idle connections
are closed at once. Indeed, without this new mechanism, in case of
soft-stop, all the idle connections would be closed at once (after the
grace period is over), and all active HTTP connections would be closed
by appending a "Connection: close" header to the next response that goes
over it (or via a GOAWAY frame in case of HTTP2).

This patch adds the support of this new option for HTTP as well as HTTP2
connections. It works differently on active and idle connections.

On active connections, instead of sending systematically the GOAWAY
frame or adding the 'Connection: close' header like before once the
soft-stop has started, a random based on the remainder of the close
window is calculated, and depending on its result we could decide to
keep the connection alive. The random will be recalculated for any
subsequent request/response on this connection so the GOAWAY will still
end up being sent, but we might wait a few more round trips. This will
ensure that goaways are distributed along a longer time window than
before.

On idle connections, a random factor is used when determining the expire
field of the connection's task, which should naturally spread connection
closings on the time window (see h2c_update_timeout).

This feature request was described in GitHub issue #1614.
This patch should be backported to 2.5. It depends on "BUG/MEDIUM:
mux-h2: make use of http-request and keep-alive timeouts" which
refactorized the timeout management of HTTP2 connections.
2022-04-08 18:15:21 +02:00
.github CI: github actions: update OpenSSL to 3.0.2 2022-03-31 17:00:22 +02:00
addons Revert "BUILD: opentracing: display warning in case of using OT_USE_VARS at compile time" 2022-04-08 16:31:33 +02:00
admin OPTIM: halog: skip fields 64 bits at a time when supported 2021-11-08 12:08:26 +01:00
dev DEV: coccinelle: Add a new pattern to ist.cocci 2022-03-21 08:30:47 +01:00
doc MEDIUM: global: Add a "close-spread-time" option to spread soft-stop on time window 2022-04-08 18:15:21 +02:00
examples
include MEDIUM: global: Add a "close-spread-time" option to spread soft-stop on time window 2022-04-08 18:15:21 +02:00
reg-tests MINOR: sample: converter: Add add_item convertor 2022-04-04 07:30:58 +02:00
scripts CI: refactor OpenTracing build script 2022-01-19 07:37:40 +01:00
src MEDIUM: global: Add a "close-spread-time" option to spread soft-stop on time window 2022-04-08 18:15:21 +02:00
tests CLEANUP: assorted typo fixes in the code and comments 2021-08-16 12:37:59 +02:00
.cirrus.yml
.gitattributes
.gitignore DOC: lua-api: Add documentation about lua filters 2021-08-15 20:56:44 +02:00
.mailmap DOC: update Tim's address in .mailmap 2021-09-16 09:14:14 +02:00
.travis.yml CI: travis-ci: temporarily disable arm64 builds 2021-08-07 07:28:15 +02:00
BRANCHES
CHANGELOG [RELEASE] Released version 2.6-dev4 2022-03-26 08:31:33 +01:00
CONTRIBUTING CLEANUP: assorted typo fixes in the code and comments 2021-08-16 12:37:59 +02:00
INSTALL DOC: install: describe how to choose options used in the DEBUG variable 2022-03-01 08:31:50 +01:00
LICENSE
MAINTAINERS
Makefile CLEANUP: qpack: suppress by default stdout traces 2022-03-25 15:22:40 +01:00
README
ROADMAP
SUBVERS
VERDATE [RELEASE] Released version 2.6-dev4 2022-03-26 08:31:33 +01:00
VERSION [RELEASE] Released version 2.6-dev4 2022-03-26 08:31:33 +01:00

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)