Hi,

HAProxy 3.2-dev12 was released on 2025/04/25. It added 44 new commits
after version 3.2-dev11.

Lots of small things this time. A few bugs were fixed but a few were also
discovered (less fun but that's the purpose of the feature freeze period).

For the noticeable changes:

- the CLI's buffering rework could be done. It doesn't really offer new
  features at the moment (well, you can play tetris directly from the
  CLI but that's not the point), but it makes sure the infrastructure
  will be more flexible for advanced scripting. I've long been dreaming
  of interactive tools a-la "top" on the CLI, and it seems that this
  possibility is getting closer now. At least some stuff is now possible
  using Lua so that's great.

- on the ACME front, the few previously envisioned syntax changes were
  merged ("account" -> "account-key", "uri" -> "directory"). The automated
  renewal scheduler now considers the advertised "Retry-After" in responses
  to avoid needlessly flooding the servers with requests.

- a new global directive "dns-accept-family" takes a combination of 3
  possible values, "ipv4", "ipv6" and "auto". It allows to forcefully
  disable IPv4 DNS resolutions or IPv6 DNS resolutions process-wide. This
  affects both servers and the do-resolve() action. The default is still
  "ipv4","ipv6" to match what has been done till now, but a few of us now
  think we should change it to "auto" which checks for IPv6 connectivity
  at boot time and uses that to decide whether or not to enable IPv6.
  There's obviously a caveat with that: systems where the network is not
  ready at boot could see their IPv6 resolution disabled. The way the code
  is done will permit adaptations consisting in periodically re-checking,
  which might be a nice solution as well. I'm interested in opinions on
  this. I tend to suspect that even in the current situation with a boot-
  time check, the solution can be much better than what has been the
  default over the years, creating trouble to users when IPv6-only
  addresses appear in the DNS. This would be a behavior change compared
  to 3.1 but I think it could be an acceptable one if we mention it in
  the release notes. Ah, I almost forgot, there's also a "-4" option on
  the command line to force v4-only resolutions. It can be useful for
  debugging, or even for reg-tests.

- custom "content-length: 0" headers added by the config can now be
  passed to the recipient. Some non-compliant applications need this
  with 101 or 204 status responses for example. Previously they were
  trimmed on output as unnecessary. Now they're trimmed on input and
  permitted on output so that a add-header rule works.

- a new "pause" action allows to delay processing of a request or response
  based on any criterion. It takes either a value or an expression. This
  could be used to enforce the respect of a Retry-After response for
  example, or just slow down some requests on a fragile or abused service.
  Previously it could only be hacked using tcp-request inspect-delay and
  tcp-request content rules, that was definitely no longer flexible enough.

- the HTTP client now has an HTTPS log format for HTTPS requests, which
  will help detect certificate or SSL cipher issues.

- a new directive "http-drop-request-trailers" allows to just drop trailers
  from requests or responses. This can be useful when it's known that a
  server might leak info there that's not necessary for example, or when
  a server known for being sensitive to contents there should not be
  exposed to a client sending them.

- as usual, a few cleanups.

I was particularly enthousiast until Christian reported a nasty bug proving
that we're doing something wrong in thread groups (GitHub issue #2951). I
suspect that we're sometimes incorrectly appropriating a file descriptor
when a certain sequence happens. I just can't reproduce the syndrom (and
believe me, I've been using thread groups a lot during all the development
of the cpu-policy stuff). If others think they've observed somthing similar
(typically CPUs getting to 100%, CLI failing to respond at some point), and
*ONLY* with thread-groups while it never happens without, then please share
some context there. Please do not hijack that issue for problems that are
different (e.g. problems that also happen without thread groups). This bug
was present since at least 3.2-dev8, but I suspect it could even pre-date
it and was just made easier to trigger by the addition of the cpu-policy
keyword. For me this bug is on the critical path to the release, as we
can't afford to have broken thread groups at this point in time! Thus any
extra help is welcome!

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 (4):
      BUG/MINOR: quic: do not crash on CRYPTO ncbuf alloc failure
      MINOR: h3: simplify h3_rcv_buf return path
      BUG/MINOR: mux-quic: fix possible infinite loop during decoding
      BUG/MINOR: mux-quic: do not decode if conn in error

Christopher Faulet (21):
      CLEANUP: Slightly reorder some proxy option flags to free slots
      MINOR: proxy: Add options to drop HTTP trailers during message forwarding
      MINOR: h1-htx: Skip C-L and T-E headers for 1xx and 204 messages during 
parsing
      MINOR: mux-h1: Keep custom "Content-Length: 0" header in 1xx and 204 
messages
      MINOR: hlua/h1: Use http_parse_cont_len_header() to parse content-length 
value
      CLEANUP: h1: Remove now useless h1_parse_cont_len_header() function
      BUG/MEDIUM: mux-spop: Respect the negociated max-frame-size value to send 
frames
      MINOR: http-act: Add 'pause' action to temporarily suspend the message 
analysis
      BUG/MINOR: cli: Issue an error when too many args are passed for a command
      MINOR: cli: Use a full prompt command for bidir connections with workers
      MAJOR: cli: Refacor parsing and execution of pipelined commands
      MINOR: cli: Rename some CLI applet states to reflect recent refactoring
      CLEANUP: applet: Update st0/st1 comment in appctx structure
      BUG/MINOR: hlua: Fix I/O handler of lua CLI commands to not rely on the SC
      BUG/MINOR: ring: Fix I/O handler of "show event" command to not rely on 
the SC
      MINOR: cli/applet: Move appctx fields only used by the CLI in a private 
context
      MINOR: cache: Add a pointer on the cache in the cache applet context
      MINOR: hlua: Use the applet name in error messages for lua services
      MINOR: applet: Save the "use-service" rule in the stream to init a 
service applet
      CLEANUP: applet: Remove unsued rule pointer in appctx structure
      BUG/MEDIUM: cli: Handle applet shutdown when waiting for a command line

William Lallemand (8):
      MINOR: acme/cli: add the 'acme renew' command to the help message
      MINOR: httpclient: add an "https" log-format
      MEDIUM: acme: use a customized proxy
      MEDIUM: acme: rename "uri" into "directory"
      MEDIUM: acme: rename "account" into "account-key"
      MEDIUM: acme: use Retry-After value for retries
      MEDIUM: acme: reset the remaining retries
      MEDIUM: acme: better error/retry management of the challenge checks

Willy Tarreau (11):
      BUG/MINOR: proxy: always detach a proxy from the names tree on free()
      CLEANUP: proxy: detach the name node in proxy_free_common() instead
      MINOR: stick-table: use a separate lock label for updates
      BUG/MINOR: master/cli: properly trim the '@@' process name in error 
messages
      MEDIUM: resolvers: add global "dns-accept-family" directive
      MINOR: resolvers: add command-line argument -4 to force IPv4-only DNS
      MINOR: sock-inet: detect apparent IPv6 connectivity
      MINOR: resolvers: add "dns-accept-family auto" to rely on detected IPv6
      Revert "BUG/MINOR: master/cli: properly trim the '@@' process name in 
error messages"
      BUG/MINOR: master/cli: only parse the '@@' prefix on complete lines
      MINOR: resolvers: use the runtime IPv6 status instead of boot time one

---


Reply via email to