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