Hi, HAProxy 3.1-dev3 was released on 2024/07/10. It added 35 new commits after version 3.1-dev2.
This version mostly addresses some issues affecting dev2, a few of which could cause crashes. Some of them are marked for backporting because they also affect older versions (races between server address updates and deletion, and a few things like this). There's a fix for the handling of the Transfer-encoding header in the H1 mux that was reported by Ben Kallus. It's believed to be harmless as the only server that was found to be confused cannot parse a second request, but we'll backport it soon. Another change that will need to be backported after some time concerns the handling of default FD limits. For a few decades, operating systems would advertise safe limits (i.e. those they were able to deal with based on their amount of RAM). We've seen a few attempts at bumping the hard limit beyond 1 billion FDs many years ago that were reverted due to breaking many apps. Now it seems it's coming back, via systemd-256 setting the hard-limit from the kernel's nr_open variable (which in itself is not necessarily a bad thing -- proof that I'm not always bashing systemd, only when needed :-)). But with some machines showing extreme nr_open (I still don't know why) we're back to square one where it's possible for haproxy to try to start with a limit set to one billion FDs. Not only this would eat at least 64GB of RAM just for the fdtab itself, it also takes ages to start, and fortunately the watchdog quickly puts an end to this mess... We already have an fd-hard-limit global setting that allows to fix a hard limit to the number of FDs, but not everyone knows about it nor uses it. What we've found to be the most reasonable is to consider that fd-hard-limit now has a default value of 1048576, which matches what was almost always the default hard limit, so that when not set, it's like it used to be till now. That's sufficient for the vast majority of use cases, and trust me, the rare users who need to support more than 500k concurrent connections are pretty much aware of all related tunables and already make use of them, so it's expected that nobody should observe any change. I think that after some time we'll start to backport it, at least to the latest LTS (3.0) so as to make distro packagers' lives easier. We may have to backport it to older versions as well if they ask for it. As such, feedback on this version, especially from those with large setups such as Ricardo, Felipe and Christian, would be much appreciated so that we know if any corner cases need to be adjusted for example. Among other changes, the mt_lists that were added and reverted from 2.9 were finally fixed and added back. This time I'm no longer observing the massive gain with QUIC because the stack has improved since then and likely puts less pressure on memory writes; the perf is now well beyond what it was with the fix a year ago. That's good news in any case. Some doc updates (the obsolete architecture guide that I thought dropped was still lying there after 18 years, now I got rid of it), cleanups, and an attempt from Ilya at running the QUIC interop in the weekly CI, this can definitely be cool, we'll see how it goes. Some more important changes are coming soon, so I expect that next versions will become a bit funkier. Thus if you want to give a test to 3.1-dev but don't feel like taking too many risks, this one should be the best choice for a while. And I'm still trying to free some time for the pending reviews (I have not forgotten you but stuff that depends on multiple persons cannot always wait). 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/3.1/src/ Git repository : https://git.haproxy.org/git/haproxy.git/ Git Web browsing : https://git.haproxy.org/?p=haproxy.git Changelog : https://www.haproxy.org/download/3.1/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 Willy --- Complete changelog : Amaury Denoyelle (11): BUG/MEDIUM: server: fix race on server_atomic_sync() CLEANUP: quic: cleanup prototypes related to CIDs handling CLEANUP: quic: remove non-existing quic_cid_tree definition MINOR: quic: remove access to CID global tree outside of quic_cid module REORG: quic: remove quic_cid_trees reference from proto_quic MINOR: quic: add 2 BUG_ON() on datagram dispatch MINOR: quic: ensure quic_conn is never removed on thread affinity rebind MINOR: proto: extend connection thread rebind API BUG/MEDIUM: quic: prevent crash on accept queue full DEV: flags/quic: decode quic_conn flags MINOR: quic: rename "ssl error" trace Christopher Faulet (7): BUG/MINOR: promex: Remove Help prefix repeated twice for each metric BUG/MEDIUM: hlua/cli: Fix lua CLI commands to work with applet's buffers BUG/MEDIUM: peers: Fix crash when syncing learn state of a peer without appctx BUG/MINOR: h1: Fail to parse empty transfer coding names BUG/MINOR: h1: Reject empty coding name as last transfer-encoding value BUG/MEDIUM: h1: Reject empty Transfer-encoding header BUG/MEDIUM: spoe: Be sure to create a SPOE applet if none on the current thread Frederic Lecaille (1): BUG/MINOR: quic: Wrong datagram building when probing. Ilia Shipitsin (2): CI: add weekly QUIC Interop regression against LibreSSL CI: weekly QUIC Interop: try to fix private image Valentine Krasnobaeva (3): MEDIUM: init: set default for fd_hard_limit via DEFAULT_MAXFD DOC: configuration: update maxconn description BUG/MEDIUM: init: fix fd_hard_limit default in compute_ideal_maxconn William Lallemand (5): DOC: configuration: add details about crt-store in bind "crt" keyword DOC: configuration: more details about the master-worker mode BUG/MINOR: jwt: don't try to load files with HMAC algorithm BUG/MINOR: jwt: fix variable initialisation MINOR: ssl/sample: ssl_c_san returns a comma separated list of SAN Willy Tarreau (6): BUG/MEDIUM: quic: fix possible exit from qc_check_dcid() without unlocking OPTIM: pool: improve needed_avg cache line access pattern MAJOR: import: update mt_list to support exponential back-off (try #2) BUILD: listener: silence a build warning about unused value without threads DOC: architecture: remove the totally outdated architecture manual SCRIPTS: create-release: no more need to skip architecture.txt ---