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
---