Hi,

HAProxy 3.2-dev15 was released on 2025/05/09. It added 38 new commits
after version 3.2-dev14.

Past week has been a bit chaotic, thanks mainly to two determined testers,
Christian and Basha, who reported crashes on dev14 related to peers,
queues and SPOE, and dedicated a lot of energy tweaking their configs,
testing patches, and collecting traces. Many thanks to them for this
again, I'm perfectly aware of the effort it requires to run and monitor
code after you've seen an error. It would be really nice if more testers
participated like this, even just to report "deployed dev15, no problem so
far", as it helps narrow the issues down and limits the amount of changes
we're asking others to apply. And it would spread the load on more people,
requiring less efforts to a few.

So the past 3 full days spent chasing concurrency issues explain this late
release.

The good thing in all of this, is that it has become increasingly difficult
to break the code or make it misbehave, even when having full reproducers,
and that most of the bugs fixed date from the pre-3.2 era and are no longer
regressions, so I guess that we're really close to something pretty good
now.

Aside the bugs, some small changes were applied:

  - revert of a low importance bug-fix on the SPOP mux that was causing
    infinite loops. This requires deeper changes that are no longer in the
    scope of what's acceptable for 3.2.

  - the config parser now detects and reports the problem of empty args.
    Historically, empty args used to mark the end of the line, and all
    keyword parsers currently rely on this, so that's not something that
    will disappear in a long while (though we could imagine special-casing
    some specific usages). A line like this would trigger a dirty error
    indicating a missing '}' when "FOO" is empty:

        http-request accept if { path_sub "a" "$FOO" "b" }

    this one reported by Demi Marie in issue #2944 is more vicious because
    it will silently discard the words after the empty arg:

        acl foo path_sub "a" "$FOO" "b"

    Now the parser will emit warnings about this and will try to show where
    the empty arg is. And we should decide whether to turn that into an error
    for 3.3, or just skip the empty arg if we decide that it has legit use
    cases. Note that OSS Fuzz has been helpful here, because addressing this
    woke some other dirty cases we initially overlooked like "\x00blah" ...

  - the CLI "acme ps" command was replaced with "acme status" which is a bit
    more intuitive, and shows the status of all certificates.

  - Björn reported that type "ip" in stick-tables with ipv4-only and ought
    to be renamed to "ipv4" and make "ip" ipv6. I was caught believing that
    it had already been done. So a preliminary change was merged to accept
    "ipv4" as well as "ip" in the config, with the doc encouraging to use
    it instead. IMHO we can change that in 3.3, with a few provisions that
    we much check (or ensure) that stick-tables remain compatible over peers
    so that v4-in-v6 addresses sent to a remote in v4-only can properly be
    translated. For now in order not to change anything, "ip" remains
    printed everywhere.

  - improved error reporting for ssl-f-use.

  - more improved debugging (lock history is clearer now)

  - doc updates: crt-store, new "acme" section, resolvers vs libc discussion

  - mangled outputs in thread dumps was caused by too small a buffer (4kB),
    indicating we're emitting a lot of useful info now, which also explains
    why we can more often guess a cause from a dump, or claim that two
    reports are identical. The buffer was bumped to 8kB per thread.

And that's about all for this one. There are still two pending patches I'd
like to merge to avoid runtime CPU latency warnings when dealing with
heavily contended stick-tables with many peers. The problem is that the
peers code is very old and was already not prone to efficient locking, so
it can easily start to cause locking cascades and make all threads wait in
line at various critical places. Where possible we want to limit this risk
and reduce its impacts. There's also the small change on the DNS family
choice to periodically revalidate IPv6 connectivity. That's simple to do,
I just didn't find 2 hours to finish it. Regarding the LRU cache cleanups
however, I think I'll postpone them for 3.3 as my branch still has many
patches requiring cleanups. I also need to finish the started work on
cleaning :authority from bad characters. And there was a good suggestion
by Tim to add a stick-tables section to the doc, I think I can work on
this in about a week if we don't face other big bugs.

Thus with no more blocking bug in the pipe, please give it a try again,
especially if you hadn't till now, as well as if you've tested but
remained silent, success stories are helpful to eliminate possible causes
for issues others face.

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 (8):
      MINOR: quic: extend return value during TP parsing
      BUG/MINOR: quic: use proper error code on missing CID in TPs
      BUG/MINOR: quic: use proper error code on invalid server TP
      BUG/MINOR: quic: reject retry_source_cid TP on server side
      BUG/MINOR: quic: use proper error code on invalid received TP value
      BUG/MINOR: quic: fix TP reject on invalid max-ack-delay
      BUG/MINOR: quic: reject invalid max_udp_payload size
      BUG/MEDIUM: quic: free stream_desc on all data acked

Aurelien DARRAGON (4):
      BUG/MEDIUM: stktable: fix sc_*(<ctr>) BUG_ON() regression with ctx > 9
      BUG/MINOR: proxy: only use proxy_inc_fe_cum_sess_ver_ctr() with frontends
      BUG/MINOR: cli: fix too many args detection for commands
      MINOR: server: ensure server postparse tasks are run for dynamic servers

Christopher Faulet (1):
      Revert "BUG/MEDIUM: mux-spop: Handle CLOSING state and wait for AGENT 
DISCONNECT frame"

William Lallemand (7):
      BUG/MINOR: acme/cli: don't output error on success
      MINOR: acme/cli: 'acme status' show the status acme-configured 
certificates
      MEDIUM: acme/ssl: remove 'acme ps' in favor of 'acme status'
      DOC: configuration: add "acme" section to the keywords list
      DOC: configuration: add the "crt-store" keyword
      MINOR: ssl: add filename and linenum for ssl-f-use errors
      BUG/MINOR: ssl: can't use crt-store some certificates in ssl-f-use

Willy Tarreau (18):
      BUG/MINOR: tools: do not create an empty arg from trailing spaces
      MEDIUM: config: warn about the consequences of empty arguments on a 
config line
      MINOR: tools: make parse_line() provide hints about empty args
      MINOR: cfgparse: visually show the input line on empty args
      BUG/MINOR: tools: always terminate empty lines
      BUG/MINOR: tools: make parseline report the required space for the 
trailing 0
      DEBUG: threads: don't keep lock label "OTHER" in the per-thread history
      DEBUG: threads: merge successive idempotent lock operations in history
      DEBUG: threads: display held locks in threads dumps
      BUG/MAJOR: queue: lock around the call to pendconn_process_next_strm()
      BUG/MINOR: tools: only fill first empty arg when not out of range
      MINOR: debug: bump the dump buffer to 8kB
      MINOR: stick-tables: add "ipv4" as an alias for the "ip" type
      BUG/MEDIUM: peers: hold the refcnt until updating ts->seen
      BUG/MEDIUM: stick-tables: close a tiny race in __stksess_kill()
      BUG/MEDIUM: stick-table: always remove update before adding a new one
      BUG/MINOR: cfgparse: consider the special case of empty arg caused by \x00
      DOC: config: recommend disabling libc-based resolution with resolvers

---


Reply via email to