b2817a3bdc
Patrick Hemmer reported an interesting case where the status present in the logs doesn't reflect what was reported to the user. During analysis we could figure that it was in fact solely caused by the code dealing with the set-status action. Indeed, set-status does update the status in the HTX message itself but not in the HTTP transaction. However, at most places where the status is needed to take a decision, it is retrieved from the transaction, and the logs proceed like this as well, though the "status" sample fetch function does retrieve it from the HTX data. This particularly means that once a set-status has been used to modify the status returned to the user, logs do not match that status, and the response code distribution doesn't match either. However a subsequent rule using the status as a condition will still match because the "status" sample fetch function does also extract the status from the HTX stream. Here's an example that fails: frontend f bind :8001 mode http option httplog log stdout daemon http-after-response set-status 400 This will return a 400 to the client but log a 503 and increment http_rsp_5xx. In the end the root cause is that we need to make txn->status the only authoritative place to get the status, and as such it must be updated by the set-status rule. Ideally "status" should just use txn->status but with the two synchronized this way it's not needed. This should be backported since it addresses some consistency issues between logs and what's observed. The set-status action appeared in 1.9 so all stable versions are eligible. (cherry picked from commit 640e253698b1016f115552d1d5bbb81e5263377d) Signed-off-by: Willy Tarreau <w@1wt.eu> (cherry picked from commit 87c1d795d7e9299d374a7ef9c6beda5e3bbea354) Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
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
Shell
100%