Hi,
HAProxy 3.2-dev14 was released on 2025/05/02. It added 23 new commits
after version 3.2-dev13.
This version resolves a serious regression that affected the scheduler in
-dev13 and that would basically make any process crash seconds to minutes
after startup!
By this time, a few extra things were completed:
- acme: a basic scheduler is now automatically enabled when at least
one acme section was configured. It will periodically check all the
certs monitored by acme and trigger a renew if the cert is in its
last 1/12 of validity period, or 7 days if "notBefore" is not set.
The check will be run every 12 hours, which should be sufficient to
retain certs operational.
- stick-tables/peers: the huge locking cost that results from a
stick-table to be subscribed to a peers section is now addressed for a
great part. Instead of each thread trying to lock for a tree update,
now threads are pushing updates to lists that a single- threaded task
consumes to feed the tree. This way the contention on this lock was
eliminated and the performance under 128 threads with heavy updates
roughly increased from 500k-1M updates/s to 5-8M updates/s. After
this, the watchdog detected other contended areas in the peers code
and in the stick-table expiration code. These were addressed by
allowing to work in smaller batches. At the moment we cannot even
trigger a warning anymore, but we're well aware that this whole
architecture has lived its time and would deserve being rewritten
for a great part. Regardless, the limits we're seeing are well
beyond the needs of the vast majority of users!
- Lua: warn if "tune.lua.bool-sample-conversion" is set after a "lua-load"
(and ignore it) since it would otherwise be inconsistent (e.g. used as
false during init code then true later, makes no sense).
Thus please use this version, ignore the failed dev13, and have a nice
week-end. Thanks!
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 :
Aurelien DARRAGON (1):
MINOR: hlua: ignore "tune.lua.bool-sample-conversion" if set after
"lua-load"
Olivier Houchard (5):
BUG/MEDIUM: quic: Let it be known if the tasklet has been released.
MEDIUM: peers: Give up if we fail to take locks in hot path
MEDIUM: stick-tables: defer adding updates to a tasklet
MEDIUM: stick-tables: Limit the number of old entries we remove
MEDIUM: stick-tables: Limit the number of entries we expire
Valentine Krasnobaeva (1):
MINOR: cfgparse-global: add explicit error messages in
cfg_parse_global_env_opts
William Lallemand (14):
MINOR: acme: retry label always do a request
MINOR: acme: does not leave task for next request
BUG/MINOR: acme: reinit the retries only at next request
MINOR: acme: change the default max retries to 5
MINOR: acme: allow a delay after a valid response
MINOR: acme: wait 5s before checking the challenges results
MINOR: acme: emit a log when starting
MINOR: acme: delay of 5s after the finalize
DOC: acme: external account binding is not supported
MINOR: ssl: add function to extract X509 notBefore date in time_t
BUILD: acme: need HAVE_ASN1_TIME_TO_TM
MINOR: acme: move the acme task init in a dedicated function
MEDIUM: acme: add a basic scheduler
MINOR: acme: emit a log when the scheduler can't start the task
Willy Tarreau (2):
BUG/MAJOR: tasks: fix task accounting when killed
CLEANUP: tasks: use the local state, not t->state, to check for tasklets
---