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

Reply via email to