Hi,
HAProxy 2.0.16 was released on 2020/07/17. It added 45 new commits after version
2.0.15.
A major issue was fixed when a connection retry is performed after a failure. In
this case, a new connection was created but the destination address was not set
again. So, if the connection was recycled from the memory pool, the previous
address was used, leading to a connection established to a random destination
(to
any server in any backend). If a freshly allocated connection was used, no
destination address was set, leading to an internal error. The bug comes from a
recent fix to avoid some crashes when using L7 retries. Only the 2.0.15 is
affected by this bug. Many thanks to Michael Wimmesberger for its detailed bug
report and its reproducer.
This bug reveals another one about connection retries when the plain HTTP proxy
mode is used (http_proxy option). On the 2.0.15, it does not work anymore
because, on failure, the connection is released and, with it, all information
about the destination address it carried. Because there was no simple solution
to
fix this bug and because it is not a so commonly used option, we decided to
simply disable the connection retries in this case. This limitation is specific
to the 2.0.
Some issues about the splicing for HTTP/1 sessions were fixed. A freeze of the
connection may be experienced if a shutdown for reads is received while the
splicing is in use. Another freeze may also be experienced if more than
tune.recv_enough bytes are moved to a pipe and immediately sent. It happens
because the FD's ability to read is not re-enabled after a successful send on
the opposite side. To fix the bug, the FD's ability to read is no more checked
when we try to move data to a pipe. At worst, we have an extra syscall from time
to time. Next, a wakeups loop on an HTTP/1 connection was fixed. It may happen
if the splicing is in use with no data in the pipe. Finally, the splicing now
works again for connections in tunnel mode.
A bug leading to a wakeups loop of the LUA cosocket's applet was fixed. It is
due to an old bug in the way data are read on LUA cosocket, especially if the
read per line is used. An unfinished line is never consumed, even if a shutdown
for writes is pending. The applet is woken up in loop to flush the data to ack
the shutdown for writes but data are never consumed.
And, as usual, a bunch of fixes or minor changes here and there. Among others :
- An old issue about the watchdog triggering when reloading huge maps was
fixed.
- The hdr_ip sample fetch function was fixed. It could parse more characters
than really present in the sample, occasionally causing some trailing
digits present in a previous sample to be read.
- Pattern matching against strings was fixed to be sure to always add a
trailing null character to the tested string. If the buffer is not large
enough, it is now duplicated. This fixes a possible buffer overflow.
- The command line finally supports escaping spaces using a backslash, thanks
to Yves Lafon, and to William who could adjust the master CLI code to match
it.
- "show sess" would endlessly dump new streams when they arrive too fast. It
was a real pain so now it will only dump past the last stream known at the
moment the command is typed. This means that it may show less streams than
the total, but will not result in multi-gigabyte dumps anymore.
- New set of ssl_s_* sample fetch functions to retrieve information about a
server's SSL certificate.
- For systemd users, the network dependency to start haproxy in the unit file
was fixed, thanks to a patch from Ryan O'Hara. It will now wait for an
online network. This is so that those who use DNS names where addresses are
expected don't have startup failures at boot.
- 404, 410 and 413 status codes are now supported in errorfiles.
Don't forget to update to this version if you are using the 2.0 branch,
especially if you are running the 2.0.15.
Please find the usual URLs below :
Site index : http://www.haproxy.org/
Discourse : http://discourse.haproxy.org/
Slack channel : https://slack.haproxy.org/
Issue tracker : https://github.com/haproxy/haproxy/issues
Sources : http://www.haproxy.org/download/2.0/src/
Git repository : http://git.haproxy.org/git/haproxy-2.0.git/
Git Web browsing : http://git.haproxy.org/?p=haproxy-2.0.git
Changelog : http://www.haproxy.org/download/2.0/src/CHANGELOG
Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/
---
Complete changelog :
Anthonin Bonnefoy (1):
MINOR: http: Add support for http 413 status
Christopher Faulet (14):
REGTEST: Add a simple script to tests errorfile directives in proxy
sections
MINOR: spoe: Don't systematically create new applets if processing rate
is low
BUG/MEDIUM: pattern: Add a trailing \0 to match strings only if possible
BUG/MINOR: mux-h1: Fix the splicing in TUNNEL mode
BUG/MINOR: mux-h1: Don't read data from a pipe if the mux is unable to
receive
BUG/MINOR: mux-h1: Disable splicing only if input data was processed
BUG/MEDIUM: mux-h1: Disable splicing for the conn-stream if read0 is
received
BUG/MEDIUM: mux-h1: Subscribe rather than waking up in h1_rcv_buf()
BUG/MEDIUM: connection: Continue to recv data to a pipe when the FD is
not ready
BUG/MINOR: backend: Remove CO_FL_SESS_IDLE if a client remains on the
last server
BUG/MAJOR: stream: Mark the server address as unset on new outgoing
connection
BUG/MEDIUM: stream-int: Disable connection retries on plain HTTP proxy
mode
BUG/MEDIUM: mux-h1: Continue to process request when switching in tunnel
mode
BUG/MEDIUM: channel: Be aware of SHUTW_NOW flag when output data are
peeked
Emeric Brun (1):
BUG/MEDIUM: log: issue mixing sampled to not sampled log servers.
Florian Tham (2):
MINOR: http: Add 410 to http-request deny
MINOR: http: Add 404 to http-request deny
Miroslav Zagorac (1):
BUG/MINOR: spoe: correction of setting bits for analyzer
Ryan O'Hara (1):
BUG/MINOR: systemd: Wait for network to be online
Tim Duesterhus (4):
BUG/MEDIUM: fetch: Fix hdr_ip misparsing IPv4 addresses due to missing NUL
BUG/MINOR: http_act: don't check capture id in backend (2)
BUG/MINOR: sample: Free str.area in smp_check_const_bool
BUG/MINOR: sample: Free str.area in smp_check_const_meth
William Lallemand (7):
BUG/MINOR: mworker/cli: fix the escaping in the master CLI
BUG/MINOR: mworker/cli: fix semicolon escaping in master CLI
REGTEST: http-rules: test spaces in ACLs
REGTEST: http-rules: test spaces in ACLs with master CLI
REGTEST: ssl: tests the ssl_f_* sample fetches
REGTEST: ssl: add some ssl_c_* sample fetches test
DOC: ssl: add "allow-0rtt" and "ciphersuites" in crt-list
Willy Tarreau (13):
BUG/MINOR: tcp-rules: tcp-response must check the buffer's fullness
BUG/MEDIUM: ebtree: use a byte-per-byte memcmp() to compare memory blocks
BUG/MINOR: spoe: add missing key length check before checking key names
MEDIUM: map: make the "clear map" operation yield
BUG/MINOR: http_ana: clarify connection pointer check on L7 retry
MINOR: cli: make "show sess" stop at the last known session
BUG/MINOR: proxy: fix dump_server_state()'s misuse of the trash
BUG/MINOR: proxy: always initialize the trash in show servers state
DOC: configuration: add missing index entries for
tune.pool-{low,high}-fd-ratio
DOC: configuration: fix alphabetical ordering for
tune.pool-{high,low}-fd-ratio
MINOR: connection: move the CO_FL_WAIT_ROOM cleanup to the reader only
DOC: configuration: remove obsolete mentions of H2 being converted to
HTTP/1.x
CONTRIB: da: fix memory leak in dummy function da_atlas_open()
Yves Lafon (1):
BUG/MINOR: cli: allow space escaping on the CLI
---
--
Christopher Faulet