15a4733d5d
Christian Ruppert reported an issue explaining that it's not possible to forcefully close H2 connections which do not receive requests anymore if they continue to send control traffic (window updates, ping etc). This will indeed refresh the timeout. In H1 we don't have this problem because any single byte is part of the stream, so the control frames in H2 would be equivalent to TCP acks in H1, that would not contribute to the timeout being refreshed. What misses from H2 is the use of http-request and keep-alive timeouts. These were not implemented because initially it was hard to see how they could map to H2. But if we consider the real use of the keep-alive timeout, that is, how long do we keep a connection alive with no request, then it's pretty obvious that it does apply to H2 as well. Similarly, http-request may definitely be honored as soon as a HEADERS frame starts to appear while there is no stream. This will also allow to deal with too long CONTINUATION frames. This patch moves the timeout update to a new function, h2c_update_timeout(), which is in charge of this. It also adds an "idle_start" timestamp in the connection, which is set when nb_cs reaches zero or when a headers frame start to arrive, so that it cannot be delayed too long. This patch should be backported to recent stable releases after some observation time. It depends on previous patch "MEDIUM: mux-h2: slightly relax timeout management rules". |
||
---|---|---|
.github | ||
addons | ||
admin | ||
dev | ||
doc | ||
examples | ||
include | ||
reg-tests | ||
scripts | ||
src | ||
tests | ||
.cirrus.yml | ||
.gitattributes | ||
.gitignore | ||
.mailmap | ||
.travis.yml | ||
BRANCHES | ||
CHANGELOG | ||
CONTRIBUTING | ||
INSTALL | ||
LICENSE | ||
MAINTAINERS | ||
Makefile | ||
README | ||
ROADMAP | ||
SUBVERS | ||
VERDATE | ||
VERSION |
README
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)