Hi, HAProxy 3.2-dev12 was released on 2025/04/25. It added 44 new commits after version 3.2-dev11.
Lots of small things this time. A few bugs were fixed but a few were also discovered (less fun but that's the purpose of the feature freeze period). For the noticeable changes: - the CLI's buffering rework could be done. It doesn't really offer new features at the moment (well, you can play tetris directly from the CLI but that's not the point), but it makes sure the infrastructure will be more flexible for advanced scripting. I've long been dreaming of interactive tools a-la "top" on the CLI, and it seems that this possibility is getting closer now. At least some stuff is now possible using Lua so that's great. - on the ACME front, the few previously envisioned syntax changes were merged ("account" -> "account-key", "uri" -> "directory"). The automated renewal scheduler now considers the advertised "Retry-After" in responses to avoid needlessly flooding the servers with requests. - a new global directive "dns-accept-family" takes a combination of 3 possible values, "ipv4", "ipv6" and "auto". It allows to forcefully disable IPv4 DNS resolutions or IPv6 DNS resolutions process-wide. This affects both servers and the do-resolve() action. The default is still "ipv4","ipv6" to match what has been done till now, but a few of us now think we should change it to "auto" which checks for IPv6 connectivity at boot time and uses that to decide whether or not to enable IPv6. There's obviously a caveat with that: systems where the network is not ready at boot could see their IPv6 resolution disabled. The way the code is done will permit adaptations consisting in periodically re-checking, which might be a nice solution as well. I'm interested in opinions on this. I tend to suspect that even in the current situation with a boot- time check, the solution can be much better than what has been the default over the years, creating trouble to users when IPv6-only addresses appear in the DNS. This would be a behavior change compared to 3.1 but I think it could be an acceptable one if we mention it in the release notes. Ah, I almost forgot, there's also a "-4" option on the command line to force v4-only resolutions. It can be useful for debugging, or even for reg-tests. - custom "content-length: 0" headers added by the config can now be passed to the recipient. Some non-compliant applications need this with 101 or 204 status responses for example. Previously they were trimmed on output as unnecessary. Now they're trimmed on input and permitted on output so that a add-header rule works. - a new "pause" action allows to delay processing of a request or response based on any criterion. It takes either a value or an expression. This could be used to enforce the respect of a Retry-After response for example, or just slow down some requests on a fragile or abused service. Previously it could only be hacked using tcp-request inspect-delay and tcp-request content rules, that was definitely no longer flexible enough. - the HTTP client now has an HTTPS log format for HTTPS requests, which will help detect certificate or SSL cipher issues. - a new directive "http-drop-request-trailers" allows to just drop trailers from requests or responses. This can be useful when it's known that a server might leak info there that's not necessary for example, or when a server known for being sensitive to contents there should not be exposed to a client sending them. - as usual, a few cleanups. I was particularly enthousiast until Christian reported a nasty bug proving that we're doing something wrong in thread groups (GitHub issue #2951). I suspect that we're sometimes incorrectly appropriating a file descriptor when a certain sequence happens. I just can't reproduce the syndrom (and believe me, I've been using thread groups a lot during all the development of the cpu-policy stuff). If others think they've observed somthing similar (typically CPUs getting to 100%, CLI failing to respond at some point), and *ONLY* with thread-groups while it never happens without, then please share some context there. Please do not hijack that issue for problems that are different (e.g. problems that also happen without thread groups). This bug was present since at least 3.2-dev8, but I suspect it could even pre-date it and was just made easier to trigger by the addition of the cpu-policy keyword. For me this bug is on the critical path to the release, as we can't afford to have broken thread groups at this point in time! Thus any extra help is welcome! 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 (4): BUG/MINOR: quic: do not crash on CRYPTO ncbuf alloc failure MINOR: h3: simplify h3_rcv_buf return path BUG/MINOR: mux-quic: fix possible infinite loop during decoding BUG/MINOR: mux-quic: do not decode if conn in error Christopher Faulet (21): CLEANUP: Slightly reorder some proxy option flags to free slots MINOR: proxy: Add options to drop HTTP trailers during message forwarding MINOR: h1-htx: Skip C-L and T-E headers for 1xx and 204 messages during parsing MINOR: mux-h1: Keep custom "Content-Length: 0" header in 1xx and 204 messages MINOR: hlua/h1: Use http_parse_cont_len_header() to parse content-length value CLEANUP: h1: Remove now useless h1_parse_cont_len_header() function BUG/MEDIUM: mux-spop: Respect the negociated max-frame-size value to send frames MINOR: http-act: Add 'pause' action to temporarily suspend the message analysis BUG/MINOR: cli: Issue an error when too many args are passed for a command MINOR: cli: Use a full prompt command for bidir connections with workers MAJOR: cli: Refacor parsing and execution of pipelined commands MINOR: cli: Rename some CLI applet states to reflect recent refactoring CLEANUP: applet: Update st0/st1 comment in appctx structure BUG/MINOR: hlua: Fix I/O handler of lua CLI commands to not rely on the SC BUG/MINOR: ring: Fix I/O handler of "show event" command to not rely on the SC MINOR: cli/applet: Move appctx fields only used by the CLI in a private context MINOR: cache: Add a pointer on the cache in the cache applet context MINOR: hlua: Use the applet name in error messages for lua services MINOR: applet: Save the "use-service" rule in the stream to init a service applet CLEANUP: applet: Remove unsued rule pointer in appctx structure BUG/MEDIUM: cli: Handle applet shutdown when waiting for a command line William Lallemand (8): MINOR: acme/cli: add the 'acme renew' command to the help message MINOR: httpclient: add an "https" log-format MEDIUM: acme: use a customized proxy MEDIUM: acme: rename "uri" into "directory" MEDIUM: acme: rename "account" into "account-key" MEDIUM: acme: use Retry-After value for retries MEDIUM: acme: reset the remaining retries MEDIUM: acme: better error/retry management of the challenge checks Willy Tarreau (11): BUG/MINOR: proxy: always detach a proxy from the names tree on free() CLEANUP: proxy: detach the name node in proxy_free_common() instead MINOR: stick-table: use a separate lock label for updates BUG/MINOR: master/cli: properly trim the '@@' process name in error messages MEDIUM: resolvers: add global "dns-accept-family" directive MINOR: resolvers: add command-line argument -4 to force IPv4-only DNS MINOR: sock-inet: detect apparent IPv6 connectivity MINOR: resolvers: add "dns-accept-family auto" to rely on detected IPv6 Revert "BUG/MINOR: master/cli: properly trim the '@@' process name in error messages" BUG/MINOR: master/cli: only parse the '@@' prefix on complete lines MINOR: resolvers: use the runtime IPv6 status instead of boot time one ---