Hi, HAProxy 3.2-dev4 was released on 2025/01/24. It added 44 new commits after version 3.2-dev3.
This version contains fixes for some visible bugs (most of which are already either backported or planned for backporting). One issue concerns a risk of crash in QUIC with too large crypto frames, another one causes confusion on log servers having the same name in different backends, and another one could leave some HTTP/1 connections blocked till the timeout. The other bugs are just in the range of common ones. Concerning the improvements, we have this: - new sc_key() sample fetch to retrieve the key currently tracked by a strick-counter. It can be useful for logging, for lookups in other tables or anything like this. It has been missing for a long time and can simplify some configurations (e.g. by no longer having to set a variable to hold that value). - new table_{inc,dec}_gpc* converters to act on gpc counters after looking up the input sample. That's convenient to set match thresholds. - the parsing of the -dt keyword used to enable traces from the command line was revamped to be more flexible and to provide a help message explaining how to use it. Also -dt now has precedence over the traces section. - the QUIC pacing now works pretty well without wasting CPU cycles, we managed to get back to millisecond resolution with excellent results, even when the process is severely loaded. We intend to enable it by default starting from dev5 since it will enable easier testing and significantly improve performance (on a client running on a small CPU core, the performance jumped by around x20 just thanks to significantly reducing losses). - some updates to make the output of "show dev" more easily parsable and friendlier. - doc updates to mention the "any" type input on some converters, the support for implicit tables, and a bit of consistency between keywords regarding optional arguments syntax. There are still pending series under review and about to be merged. One of them concerns more detailed error statuses so that we finally know in detail (and in the right order) the events that led to a connection being terminated. Another one concerns the queues in high thread counts environments, where we know it's still possible to see watchdogs on AMD EPYC CPUs due to inter-CCX cache latency. If all goes well, this should land in the branch next week or so, stay tuned. In the mean time, please play with dev4. And if you're using QUIC and want to test it with pacing, just add "expose-experimental-directives" to your global section, and append "quic-cc-algo bbr" or "quic-cc-algo cuboc(,1)" to your bind lines. 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 (14): MINOR: trace: add help message for -dt argument MINOR: trace: ensure -dt priority over traces config section MINOR: trace: support all source alias on -dt BUG/MINOR: quic: reject NEW_TOKEN frames from clients BUG/MAJOR: quic: reject too large CRYPTO frames CLEANUP: quic: remove unused prototype MINOR: quic: rename pacing_rate cb to pacing_inter BUG/MINOR: quic: do not increase congestion window if app limited MINOR: mux-quic: increment pacing retry counter on expired MEDIUM: quic: implement credit based pacing MEDIUM: mux-quic: reduce pacing CPU usage with passive wait MEDIUM: quic: use dynamic credit for pacing MINOR: quic: remove unused pacing burst in bind_conf/quic_cc_path MINOR: quic: adapt credit based pacing to BBR Aurelien DARRAGON (19): BUG/MINOR: stktable: fix big-endian compatiblity in smp_to_stkey() MINOR: stktable: add stkey_to_smp() helper MINOR: stktable: add stksess_getkey() helper MINOR: stktable: add sc[0-2]_key fetches MINOR: stktable: fix potential build issue in smp_to_stkey BUG/MEDIUM: stktable: fix missing lock on some table converters MINOR: stktable: fix potential build issue in smp_to_stkey (2nd try) MINOR: stktable: add smp_fetch_stksess() helper function MEDIUM: stktable: split src-based key smp_fetch_sc functions MEDIUM: stktable: split sc_ and src_ fetch lookup logics MEDIUM: stktable: leverage smp_fetch_* helpers from sample conv DOC: config: unify sample conv|fetches optional arguments syntax DOC: config: stick-table converters support implicit <table> argument DOC: config: stick-table converter do accept ANY-typed input DOC: config: clarify return type for some stick-table converters DOC: config: refer to canonical sticktable converters for src_* fetches CLEANUP: stktable: move sample_conv_table_bytes_out_rate() MINOR: stktable: add table_{inc,clr}_gpc* converters BUG/MAJOR: log/sink: possible sink collision in sink_new_from_srv() Christopher Faulet (2): BUG/MEDIUM: promex: Use right context pointers to dump backends extra-counters BUG/MEDIUM: mux-h1: Properly close H1C if an error is reported before sending data Frederic Lecaille (3): BUG/MINOR: quic: ensure a detached coalesced packet can't access its neighbours MINOR: quic: Add a BUG_ON() on quic_tx_packet refcount BUILD: quic: Move an ASSUME_NONNULL() for variable which is not null Olivier Houchard (1): BUG/MEDIUM: queues: Adjust the proxy counters when appropriate Valentine Krasnobaeva (3): MINOR: tools: add errname to print errno macro name MINOR: debug: debug_parse_cli_show_dev: use errname MINOR: debug: show boot and runtime process settings in table Willy Tarreau (2): BUG/MINOR: init: set HAPROXY_STARTUP_VERSION from the variable, not the macro REORG: version: move the remaining BUILD_* stuff from haproxy.c to version.c ---