Hi,

HAProxy 3.2-dev7 was released on 2025/03/07. It added 87 new commits
after version 3.2-dev6.

25 bugs were fixed in this release, among which 9 tagged medium, half of
which aimed at making thread dumps more reliable ("show threads" and
backtraces from the watchdog timer).

Aside the usual bug fixes, we're also having more sensitive changes in
this version:

  - Just like H2, QUIC now alwo supports a larger Rx window in order to
    significantly speed up uploads (POST requests). By default, up to 90%
    of the allocatable rx buffers can be assigned to rx buffers, which
    can easily multiply the upload speed by 20-30 on high latency links.
    Please if you are using QUIC with a site dealing with uploads, give
    this a try and share some feedback. This will help us decide what
    tunables we might want to make accessible from the configutation.

  - unit tests: now when building with -DDEBUG_UNIT, a new -U argument
    will allow to name a function to be called after the conf is parsed,
    in order to run a unit test. A new build target "unit-tests" runs
    over them all. Hopefully this will encourage all devs to provide more
    unit tests directly in the code that can directly benefit from all
    the internal infrastructure without having to write extra programs in
    the tests/ subdirs.

  - idle backend connections are normally never shared between thread
    groups, they're only shared between threads. The reason is the
    possibly high cost of accessible other groups' lists. But when using
    reverse-http, this poses a problem in case all pre-established
    connections are in use on a different thread group from the one
    having to process a request, because it's not possible to establish
    new ones. Thus it now becomes possible to also steal idle connections
    from other groups in situations like this one where there is no other
    solution. And given that this is super rare, the extra cost of doing
    so remains imperceptible.

  - there's now a new option "strict-maxconn" on the servers that allows
    to enforce a strict maxconn check. Indeed, originally when there was
    no keep-alive, the number of connections was the same as the number
    of outgoing requests. When keep-alive arrived with idle connections,
    the decision was made not to break existing setups and to subject
    concurrent requests to the maxconn limit since it's what describes
    the processing cost incurred to the server. But this means that a
    server can see more connections when idle ones are accounted. In some
    rare cases, limited servers which cannot deal with idle connections
    could refrain from processing new connections. This was essentially
    observed with SPOE though we could imagine the same if someone uses,
    say, netcat as an HTTP server with a single connection. The new option
    enforces the strict limit and will either enforce the reuse of existing
    connections even from other thread groups, or actively kill unusable
    idle conns before opening new ones. Of course one must only use that
    as a last resort since it may reduce the connection reuse ratio, but
    it may be useful to work around certain components' limitations.

  - HTTP compression can now specifiy with "minsize-req" and "minsize-res"
    below which size the payload is not worth compressing. Indeed, for
    small objects, it's just a waste of time on both ends, and even of
    bandwidth if the savings are lower than the extra Content-Encoding
    header!

  - the "accept-unsafe-violations-in-http-request" and its response
    counter part now also accept websocket upgrade requests lacking the
    sec-websocket-key and sec-websocket-accept, as a use case was
    reported from API clients not producing them on internal networks.
    However, just like for H2, a fresh new header will still be produced
    on output, so this can also be used to make a non-compliant client
    talk to a compliant server.

  - the log-forward sections now support options to relax the message
    validation (dont-parse-log and assume-rfc6587-ntf).

  - the "accept_date" and "request_date" sample fetch functions now take
    care of falling back to the session's date if no stream was instantiated
    yet, e.g. when logging SSL handshake errors, instead of leaving empty
    fields. Now I'm wondering if we shouldn't consider this as a bug fix
    and backport it. Probably.

  - "show sess" on the CLI can now filter streams attached to a server,
    a backend or a frontend. The real use case is typically to automatically
    dump streams refusing to die after "shutdown server sessions", but there
    may be plenty of other valid cases such as focusing only on certain
    applications.

  - the changes needed to made stream dumps more reliable have an impact
    which is that warning dumps and "show threads" will not always resolve
    symbols (only for their own threads but no longer for others), as
    we've found cases where if another one was already doing the same,
    we could deadlock in the libc... Since the vast majority of users are
    not particularly interested in looking at the detailed output of
    "show threads", this is not a problem but I preferred to mention it
    as a visible change.

The rest is the usual CI updates, and cleanups over doc, regtests, etc.

Last point, time flies, and at the end of the month we'll be 2 months
from the release, so we'll have to calm down on changes to reserve time
for fixes coming from late testing. Let's leave sensitive changes for
the next two dev releases only, i.e. till dev9 and from that point we'll
have to focus on lighter stuff. Thus if you still have tricky changes
pending, don't wait for upstreaming them.

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 (16):
      BUG/MINOR: h3: do not report transfer as aborted on preemptive response
      CLEANUP: h3: fix documentation of h3_rcv_buf()
      MINOR: hq-interop: properly handle incomplete request
      BUG/MINOR: hq-interop: fix leak in case of rcv_buf early return
      TESTS: quic: create first quic unittest
      MINOR: h3/hq-interop: restore function for standalone FIN receive
      MINOR/OPTIM: mux-quic: do not allocate rxbuf on standalone FIN
      MINOR: mux-quic: refine reception of standalone STREAM FIN
      MINOR: mux-quic: define globally stream rxbuf size
      MINOR: mux-quic: define rxbuf wrapper
      MINOR: mux-quic: store QCS Rx buf in a single-entry tree
      MINOR: mux-quic: adjust Rx data consumption API
      MINOR: mux-quic: adapt return value of qcc_decode_qcs()
      MAJOR: mux-quic: support multiple QCS RX buffers
      MEDIUM: mux-quic: handle too short data splitted on multiple rxbuf
      MAJOR: mux-quic: increase stream flow-control for multi-buffer alloc

Aurelien DARRAGON (14):
      REGTESTS: fix reg-tests/server/abnsz.vtc
      BUG/MINOR: log: fix outgoing abns address family
      BUG/MINOR: sink: add tempo between 2 connection attempts for sft servers
      MINOR: clock: always use atomic ops for global_now_ms
      CLEANUP: log: removing "log-balance" references
      BUG/MINOR: log: set proper smp size for balance log-hash
      MINOR: log: use __send_log() with exact payload length
      MEDIUM: log: postpone the decision to send or not log with empty messages
      MINOR: proxy: make pr_mode enum bitfield compatible
      MINOR: cfgparse-listen: add and use cfg_parse_listen_match_option() helper
      BUG/MINOR: cfgparse/peers: fix inconsistent check for missing peer server
      BUG/MINOR: cfgparse/peers: properly handle ignored local peer case
      BUG/MINOR: server: dont return immediately from parse_server() when 
skipping checks
      MINOR: cfgparse/peers: provide more info when ignoring invalid "peer" or 
"server" lines

Christopher Faulet (3):
      BUG/MEDIUM: applet: Don't handle EOI/EOS/ERROR is applet is waiting for 
room
      BUG/MEDIUM: spoe/mux-spop: Introduce an NOOP action to deal with empty ACK
      BUG/MEDIUM: mux-fcgi: Try to fully fill demux buffer on receive if not 
empty

Damien Claisse (1):
      BUG/MINOR: cfgparse-tcp: relax namespace bind check

Dragan Dosen (2):
      BUG/MEDIUM: server: properly initialize PROXY v2 TLVs
      BUG/MINOR: server: fix the "server-template" prefix memory leak

Ilia Shipitsin (2):
      CI: QUIC Interop: clean old docker images
      BUILD: add possibility to use different QuicTLS variants

Olivier Houchard (8):
      MEDIUM: fd: Wait if locked in fd_grab_tgid() and fd_take_tgid().
      MINOR: fd: Add fd_lock_tgid_cur().
      MEDIUM: epoll: Make sure we can add a new event
      MINOR: pollers: Add a fixup_tgid_takeover() method.
      MEDIUM: pollers: Drop fd events after a takeover to another tgid.
      MEDIUM: connections: Allow taking over connections from other tgroups.
      MEDIUM: servers: Add strict-maxconn.
      DEBUG: init: Add a macro to register unit tests

Roberto Moreda (3):
      MINOR: log: add options eval for log-forward
      MINOR: log: detach prepare from parse message
      MINOR: log: add dont-parse-log and assume-rfc6587-ntf options

Valentine Krasnobaeva (4):
      BUG/MINOR: cfgparse: fix NULL ptr dereference in cfg_parse_peers
      MINOR: sample: allow custom date format in error-log-format
      BUG/MEIDUM: startup: return to initial cwd only after 
check_config_validity()
      MINOR: startup: adjust alert messages, when capabilities are missed

Vincent Dechenaux (1):
      MINOR: compression: Introduce minimum size

William Lallemand (15):
      MINOR: jws: implement a JWK public key converter
      DEBUG: init: add a way to register functions for unit tests
      TESTS: add a unit test runner in the Makefile
      TESTS: jws: register a unittest for jwk
      CI: github: run make unit-tests on the CI
      TESTS: add config smoke checks in the unit tests
      MINOR: jws: conversion to NIST curves name
      CI: github: remove smoke tests from vtest.yml
      TESTS: ist: fix wrong array size
      TESTS: ist: use the exit code to return a verdict
      TESTS: ist: add a ist.sh to launch in make unit-tests
      CI: github: fix h2spec.config proxy names
      TESTS: change the output of run-unittests.sh
      TESTS: unit-tests: store sh -x in a result file
      CI: github: show results of the Unit tests

Willy Tarreau (18):
      BUG/MEDIUM: uxst: fix outgoing abns address family in connect()
      BUG/MINOR: stream: do not call co_data() from __strm_dump_to_buffer()
      BUG/MINOR: mux-h1: always make sure h1s->sd exists in h1_dump_h1s_info()
      MINOR: tinfo: add a new thread flag to indicate a call from a sig handler
      BUG/MEDIUM: stream: never allocate connection addresses from signal 
handler
      MINOR: freq_ctr: provide non-blocking read functions
      BUG/MEDIUM: stream: use non-blocking freq_ctr calls from the stream dumper
      MINOR: tools: use only opportunistic symbols resolution
      CLEANUP: task: move the barrier after clearing th_ctx->current
      BUG/MINOR: h2: always trim leading and trailing LWS in header values
      MINOR: tinfo: split the signal handler report flags into 3
      BUG/MEDIUM: stream: don't use localtime in dumps from a signal handler
      OPTIM: connection: don't try to kill other threads' connection when 
!shared
      MINOR: h1: permit to relax the websocket checks for missing mandatory 
headers
      BUG/MINOR: server: check for either proxy-protocol v1 or v2 to send hedaer
      BUG/MINOR: stream: fix age calculation in "show sess" output
      MINOR: stream/cli: rework "show sess" to better consider optional 
arguments
      MINOR: stream/cli: make "show sess" support filtering on front/back/server

---


Reply via email to