Hi,
HAProxy 2.9.2 was released on 2024/01/11. It added 37 new commits
after version 2.9.1.
A major issue about the zero-copy forwarding in TCP mode was fixed in this
release. A regression was introduced to the 2.9.1, blocking connection
closure on producer side and leading to loop consuming all the CPU. It is
pretty easy to be impacted by this bug. However, there is a workaround which
consists of disabling the zero-copy forwarding in TCP mode by setting
'tune.pt.zero-copy-forwarding' global option to 'on'.
The H3 encoding of DATA frames was fixed to properly handle room issues when
several frames were encoded. Buffer allocation failures management was also
fixed at several places: zero-copy forwarding is now disabled when this
happens and the connection is closed for failures on sending path.
When a H3 HEADERS frame is encoded, an error is now triggered and the
connection is closed if there are too many headers in the response. The
maximum number of headers can be configured by setting 'tune.http.maxhdr'
global parameter.
Finally, when a H3 RESET_STREAM is emitted, the error is now properly
reported to the upper layer. It is important to do so, to interrupt futur
send operations. However, this issue should have no visible impact.
QUIC OpenSSL compatibility module was fixed to be able to handle TLS capture
of client hello information and to properly log TLS keys when enabled.
An issue with the SPOE was fixed to avoid applet creation loop when all
servers of the SPOE backend were detected as down.
The stats applet was fixed to retrieve the stats URI from the right proxy
entity. It is especially important if the applet is configured in a frontend
proxy. This fix prevents a crash when the frontend is in TCP mode.
List-based matching for maps was fixed to prevent a potential ordering
regression.
Write timeout are now properly handle when sends are blocked during
zero-copy forwarding. In addition, we now take care to not truncate the
responses, especially internal responses, when write timeouts are triggered.
A regression about the initial resolution for server addresses was
fixed. "ipv4@" and "ipv6@" prefixes were ignored at this staged. The
regression was introduced at the end of the 2.9 development cycle.
During the startup, the errors are no longer reported when network failures
are encountered for the default resolver .
A new global setting was added to the H2 multiplexer to limit the total
number of H2 streams per client connection. To do so,
'tune.h2.fe.max-total-streams' can now be used. It sets the HTTP/2 maximum
number of total streams processed per incoming connection. Once this limit
is reached, HAProxy will send a graceful GOAWAY frame informing the client
that it will close the connection after all pending streams have been
closed. In practice, clients tend to close as fast as possible when
receiving this, and to establish a new connection for next requests. Doing
this is sometimes useful and desired in situations where clients stay
connected for a very long time and cause some imbalance inside a farm. For
example, in some highly dynamic environments, it is possible that new load
balancers are instantiated on the fly to adapt to a load increase, and that
once the load goes down they should be stopped without breaking established
connections. By setting a limit here, the connections will have a limited
lifetime and will be frequently renewed, with some possibly being
established to other nodes, so that existing resources are quickly released.
And to finish, "show dev" CLI command was improved to dump the build options
and the build features.
If you are running the 2.9.0 or the 2.9.1, you must upgrade. Thanks everyone
for your help and your contributions !
Please find the usual URLs below :
Site index : https://www.haproxy.org/
Documentation : https://docs.haproxy.org/
Wiki : https://github.com/haproxy/wiki/wiki
Discourse : https://discourse.haproxy.org/
Slack channel : https://slack.haproxy.org/
Issue tracker : https://github.com/haproxy/haproxy/issues
Sources : https://www.haproxy.org/download/2.9/src/
Git repository : https://git.haproxy.org/git/haproxy-2.9.git/
Git Web browsing : https://git.haproxy.org/?p=haproxy-2.9.git
Changelog : https://www.haproxy.org/download/2.9/src/CHANGELOG
Dataplane API :
https://github.com/haproxytech/dataplaneapi/releases/latest
Pending bugs : https://www.haproxy.org/l/pending-bugs
Reviewed bugs : https://www.haproxy.org/l/reviewed-bugs
Code reports : https://www.haproxy.org/l/code-reports
Latest builds : https://www.haproxy.org/l/dev-packages
---
Complete changelog :
Amaury Denoyelle (11):
DOC: fix typo for fastfwd QUIC option
BUG/MINOR: mux-quic: always report error to SC on RESET_STREAM emission
BUG/MINOR: mux-quic: disable fast-fwd if connection on error
MINOR: h3: check connection error during sending
BUG/MINOR: h3: close connection on header list too big
MINOR: h3: add traces for connection init stage
BUG/MINOR: h3: properly handle alloc failure on finalize
BUG/MINOR: h3: close connection on sending alloc errors
BUG/MINOR: h3: disable fast-forward on buffer alloc failure
REGTESTS: check attach-srv out of order declaration
BUG/MEDIUM: h3: fix incorrect snd_buf return value
Aurelien DARRAGON (7):
MINOR: stats: store the parent proxy in stats ctx (http)
BUG/MEDIUM: stats: unhandled switching rules with TCP frontend
MINOR: server/event_hdl: add server_inetaddr struct to facilitate event
data usage
MINOR: server/event_hdl: update _srv_event_hdl_prepare_inetaddr prototype
BUG/MINOR: server/event_hdl: propagate map port info through inetaddr
event
BUG/MINOR: map: list-based matching potential ordering regression
REGTESTS: add a test to ensure map-ordering is preserved
Christopher Faulet (6):
DOC: config: Update documentation about local haproxy response
BUG/MINOR: server: Use the configured address family for the initial
resolution
BUG/MAJOR: stconn: Disable zero-copy forwarding if consumer is shut or
in error
BUG/MEDIUM: stconn: Forward shutdown on write timeout only if it is
forwardable
BUG/MEDIUM: stconn: Set fsb date if zero-copy forwarding is blocked
during nego
BUG/MEDIUM: spoe: Never create new spoe applet if there is no server up
Frédéric Lécaille (1):
BUILD: quic: Missing quic_ssl.h header protection
Frédéric Lécaille (4):
BUG/MINOR: quic: Wrong keylog callback setting.
BUG/MINOR: quic: Missing call to TLS message callbacks
CLEANUP: quic: Remaining useless code into server part
CLEANUP: quic: Double quic_dgram_parse() prototype declaration.
Ilya Shipitsin (1):
CI: use semantic version compare for determing "latest" OpenSSL
Mariam John (1):
MINOR: ssl: Update ssl_fc_curve/ssl_bc_curve to use SSL_get0_group_name
Miroslav Zagorac (2):
MINOR: ot: logsrv struct becomes logger
DOC: configuration: corrected description of keyword
tune.ssl.ocsp-update.mindelay
William Lallemand (1):
BUG/MINOR: resolvers: default resolvers fails when network not configured
Willy Tarreau (3):
MINOR: global: export a way to list build options
MINOR: debug: add features and build options to "show dev"
MINOR: mux-h2: support limiting the total number of H2 streams per
connection
--
Christopher Faulet