Hi, HAProxy 3.2-dev16 was released on 2025/05/14. It added 52 new commits after version 3.2-dev15.
After last week's bugfest, things got way better now. Half of the patches are bugfixes, mostly of minor importance and covering older versions as well. The fix for SPOP that was reverted last week was re-done in smaller chunks, hopefully better now. The issue with the empty argument in config files that Demi Marie reported was addressed. Now a warning will indicate where it is and explain that the rest of the line is ignored. We can turn that into an error for 3.3. Another issue that Demi Marie reported is the possible use of undesired chars in the :authority H2/H3 header before reassembling the URI (something that was discussed too late to appear detailed in the HTTP RFC in 2021 and which ended up with just a single line basically saying "be careful"). Now we're doing something clean, and we'll have to do the same for the Host header as well. The locations to do that efficiently in H1/H2/H3 have been identified, it will be done after this -dev version. Aside bugs, there were still a few updates: - the IPv6 connectivity check used by "dns-family-auto" is now only valid for 30s and will be automatically rechecked. This ensures that a machine configured in "auto" mode that boots without network will eventually get the knowledge of its real connectivity. Note that the test is ultra cheap (only a route lookup), which is why we can afford to periodically reverify. - ACME: it's now possible to manually enable/disable the automatic scheduler via the global section ("acme.scheduler"). - QUIC: "show quic" now supports "stream" to see a per-stream roll down of all connections comparable to "show sess", with info about pending data etc. Also a possibly crashing bug affecting ~dev12 and above was fixed. - CPU topology: better identification of performance vs efficiency cores. A new "group-by-ccx" policy was added to only rely on L3 and not clusters because on small CPUs (laptops & desktops) made of P+E cores, they share the same L3 and we don't necessarily want to split groups around core types. The "performance" policy now considers the per-core capacity and not the per-cluster one, otherwise CPUs with many small cores would preferably use them, which was not the point. The default limit of number of threads (256) was raise to 1024 after seeing the limit hit on a dual EPYC 9845 (640 CPUs total). The max number of thread groups was raised from 16 to 32 to accommodate for the 20 there. Let's hope such type of machines doesn't become the norm in the next few years but only remains exceptional. - some warnings when certain keywords are used twice in crt-list and crt-store. - doc updates: the config doc was a bit reorganized so that stick-tables and peers have their own section, and so that some sections that landed in chapter 3 ("global") by accident are now moved away from this. This results in something more readable overall. - CI updates to enable unit tests on aws-lc, wolfssl, quictls & musl - pool debugging: support a new "backup" mode that does like integrity but keeping an unaltered copy of the area. (used to detect some UAF conditions) Given how we are now WRT bugs (spending a whole day on doc usually is a hint), I think we're fine with a release in two weeks. This means that we'd do yet another -dev17 in the middle of next week, and the final 3.2 the week after, ideally in the middle of the week (let's aim on Wed 28 by principle, knowing it can move a bit). Of course if horrible things are discovered in the mean time, it can slip but at this point I'm not seeing any reason for that to happen. Those of us not working on their presentations will continue on doc, bugs and small non-risky stuff till then. BTW if you have complaints about some stuff in the doc, it's the right moment to raise them. As long as there are not too many and we don't reorganize everything, it's a good moment to improve the ability to find what we're looking for there. 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.2/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.2/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 (6): BUG/MEDIUM: mux-quic: fix crash on invalid fctl frame dereference MINOR: quic: account Tx data per stream MINOR: mux-quic: account Rx data per stream MINOR: quic: add stream format for "show quic" MINOR: quic: display QCS info on "show quic stream" MINOR: quic: display stream age Aurelien DARRAGON (3): BUG/MINOR: threads: fix soft-stop without multithreading support BUG/MINOR: server: dont depend on proxy for server cleanup in srv_drop() BUG/MINOR: server: perform lbprm deinit for dynamic servers Christopher Faulet (13): BUG/MINOR: hlua: Fix Channel:data() and Channel:line() to respect documentation DOC: config: Fix a typo in the "term_events" definition BUG/MINOR: spoe: Don't report error on applet release if filter is in DONE state BUG/MINOR: mux-spop: Don't report error for stream if ACK was already received BUG/MINOR: mux-spop: Make the demux stream ID a signed integer BUG/MINOR: mux-spop: Don't open new streams for SPOP connection on error MINOR: mux-spop: Don't set SPOP connection state to FRAME_H after ACK parsing BUG/MEDIUM: mux-spop: Remove frame parsing states from the SPOP connection state BUG/MEDIUM: mux-spop: Properly handle CLOSING state BUG/MEDIUM: spop-conn: Report short read for partial frames payload BUG/MEDIUM: mux-spop: Properly detect truncated frames on demux to report error BUG/MEDIUM: mux-spop; Don't report a read error if there are pending data DEBUG: mux-spop: Review some trace messages to adjust the message or the level Ilia Shipitsin (6): CI: AWS-LC(fips): enable unit tests CI: AWS-LC: enable unit tests CI: compliance: limit run on forks only to manual + cleanup CI: musl: enable unit tests CI: QuicTLS (weekly): limit run on forks only to manual dispatch CI: WolfSSL: enable unit tests William Lallemand (7): MINOR: acme: add the global option 'acme.scheduler' BUG/MINOR: ssl: doesn't fill conf->crt with first arg BUG/MINOR: ssl: prevent multiple 'crt' on the same ssl-f-use line BUG/MINOR: ssl/ckch: always free() the previous entry during parsing MINOR: tools: ha_freearray() frees an array of string BUG/MINOR: ssl/ckch: always ha_freearray() the previous entry during parsing MINOR: ssl/ckch: warn when the same keyword was used twice Willy Tarreau (17): DEBUG: pool: permit per-pool UAF configuration DEBUG: pools: add a new integrity mode "backup" to copy the released area MEDIUM: sock-inet: re-check IPv6 connectivity every 30s BUG/MINOR: tools: improve parse_line()'s robustness against empty args BUG/MINOR: cfgparse: improve the empty arg position report's robustness MINOR: http: add a function to validate characters of :authority BUG/MEDIUM: h2/h3: reject some forbidden chars in :authority before reassembly BUG/MINOR: cpu-topo: fix group-by-cluster policy for disordered clusters MINOR: cpu-topo: add a new "group-by-ccx" CPU policy MINOR: cpu-topo: provide a function to sort clusters by average capacity MEDIUM: cpu-topo: change "performance" to consider per-core capacity MEDIUM: cpu-topo: change "efficiency" to consider per-core capacity MEDIUM: cpu-topo: prefer grouping by CCX for "performance" and "efficiency" MEDIUM: config: change default limits to 1024 threads and 32 groups DOC: config: move address formats definition to section 2 DOC: config: move stick-tables and peers to their own section DOC: config: move the extraneous sections out of the "global" definition ---