Hi,

HAProxy 2.9-dev9 was released on 2023/11/04. It added 42 new commits
after version 2.9-dev8.

This version was mostly focused on fixing issues introduced during
2.9-dev, which is a good indication that things are calming down and
stabilizing. A few of them could cause crashes.

Aside bug fixes come some improvements:

  - QUIC connections are now accounted for, both in terms of connections
    and SSL connections. Thus the maxsslconn should now work, for
    example.

  - stick-tables now support pushing incoming non-aggregable data to
    another table. This is useful in cluster setups where each node
    tracks activity to its local table and also watches the neighbors'
    tables. Some info such as server_id, gpt etc work differently in that
    the last update overrides all values. But trying to perform
    stickiness in such setups wouldn't work (or requires separate tables
    which is not always convenient). Now placing "write-to table-foo" on
    a stick-table line will automatically refresh the equivalent entry in
    table-foo when a peer sends an update for such data, so so that the
    local table can be used both for counters and tags or stickiness.

  - it's now possible to set arbitrary PROXY Protocol fields in outgoing
    server connections with the new "set-proxy-v2-tlv-fmt()" directive.
    It will no longer be required to abuse the unique-id header for this,
    as I've heard in the past.

  - Lua's logging can now be selectively enabled for stderr and for
    loggers, and by default stderr will only be used if no loggers are
    available (so as to avoid log duplication for those who collect
    stderr and logs at the same place).

  - a new pair of sample fetch functions "req.cook_names" and
    "res.cook_names" return the list of the cookie names found in the
    request and response respectively. This can be used to improve
    logging or to quickly validate that a request has everything needed
    to be reliably processed.

  - initialization errors caused by stick-tables will now be a bit more
    verbose; till now a memory allocation failure would just have reported
    "failed to initialize stick-table foo" without more explanation.

  - the config check performed by the systemd unit file on reloads is no
    longer marked quiet, because that apparently hides errors un reloads.
    Now errors and warnings will be visible in "systemctl status".

  - the H2 mux uses significantly less memory and is up to 40-60% more
    CPU-efficient on large transfers thanks to a faster recycling of the
    buffers that significantly increases the probability of performing
    zero-copy operations.

  - the panic dumps are progressively getting smarter by trying to detect
    some likely causes and giving some hints. For example if a call to
    malloc_trim() is detected in the trace, a suggestion to disable it
    will be emitted. Similarly if a thread is waiting on the Lua lock
    while some "lua-load" directives are in used, an invitation to try
    "lua-load-per-thread" will be emitted. And if a watchdog triggers
    inside Lua, some possible causes will be proposed (including the
    fact that maybe the script depends on some external unsafe library).

  - wolfssl-5.6.4 was finally issued and is in a much better shape than
    5.6.3 for haproxy compatibility, without requiring to close directly
    from github, so docs were updated to reflect this.

  - some doc updates as usual

I'm glad to see we could finally merge in time all the pending stuff that
has been floating around for some time, it will let us focus on bug fixing
and cleanups now. Thanks to those who pinged me again in time ;-)

Some issues and limitations are still present:

  - when using the reverse-http, if an SNI is needed on the server line,
    please make sure to use a constant expression (e.g. sni str("foo")),
    as the lack of a session during the pre-connect phase would currently
    crash on non-constant expressions.

  - the cases where large numbers of buffers remain allocated was finally
    found and I even have a tested fix for it. It "just" needs to be
    committed and documented, as usual.

  - with Amaury and Christopher we've identified a class of problems that
    are responsible for the occasional process_stream() loops that some
    like Tristan have been witnessing recently. There are essentially two
    causes, one that's easy to fix, caused by a difference in the way two
    layers check for available room in a buffer, and another one, more
    subtle, related to the way we calculate the next activity timeout for
    a given condition. Some of them are not always properly shut or may be
    re-armed after certain events (e.g. end of transfer) and we'll need to
    carefully review these use cases to see how to address them. It's a
    bit tricky.

We're still on track for a release around the end of this month. Tests are
still really necessary, especially if you've been waiting for a feature in
this version. It would be bad to wait for the release to test it, spot a
bug, and have to wait for a next stable release! The pending issues above
do not prevent the code from working at all, as we can see on haproxy.org
and the few other places that run 2.9-dev. Running some dev "just" requires
a certain level of control of one's production (typically ease of rollback
in case anything would go wrong).

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/2.9/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/2.9/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 :
Aleksandar Lazic (1):
      DOC: internal: filters: fix reference to entities.pdf

Alexander Stephan (2):
      MINOR: server: Add parser support for set-proxy-v2-tlv-fmt
      MINOR: connection: Send out generic, user-defined server TLVs

Amaury Denoyelle (10):
      BUG/MINOR: backend: fix wrong BUG_ON for avail conn
      BUG/MAJOR: backend: fix idle conn crash under low FD
      MINOR: backend: refactor insertion in avail conns tree
      BUG/MINOR: quic: do not consider idle timeout on CLOSING state
      MINOR: frontend: implement a dedicated actconn increment function
      BUG/MINOR: ssl: use a thread-safe sslconns increment
      MEDIUM: quic: count quic_conn instance for maxconn
      MEDIUM: quic: count quic_conn for global sslconns
      BUG/MINOR: mux-quic: fix early close if unset client timeout
      BUG/MINOR: proto_reverse_connect: support SNI on active connect

Aurelien DARRAGON (10):
      BUG/MEDIUM: server/log: "mode log" after server keyword causes crash
      MINOR: connection: add conn_pr_mode_to_proto_mode() helper func
      BUG/MEDIUM: server: "proto" not working for dynamic servers
      MINOR: server: add helper function to detach server from proxy list
      MINOR: proxy/stktable: add resolve_stick_rule helper function
      BUG/MINOR: stktable: missing free in parse_stick_table()
      BUG/MINOR: cfgparse/stktable: fix error message on stktable_init() failure
      MINOR: stktable: stktable_init() sets err_msg on error
      MINOR: stktable: check if a type should be used as-is
      MEDIUM: stktable/peers: "write-to" local table on peer updates

Christopher Faulet (1):
      BUG/MINOR: tcpcheck: Report hexstring instead of binary one on check 
failure

Ruei-Bang Chen (1):
      MINOR: sample: Add fetcher for getting all cookie names

Tristan (2):
      MINOR: lua: Add flags to configure logging behaviour
      MINOR: lua: change tune.lua.log.stderr default from 'on' to 'auto'

William Lallemand (7):
      BUG/MINOR: ssl: load correctly @system-ca when ca-base is define
      BUG/MINOR: ssl: suboptimal certificate selection with TLSv1.3 and dual 
ECDSA/RSA
      REGTESTS: ssl: update the filters test for TLSv1.3 and sigalgs
      BUG/MEDIUM: ssl: segfault when cipher is NULL
      MEDIUM: systemd: be more verbose about the reload
      CI: github: update wolfSSL to 5.6.4
      DOC: install: update the wolfSSL required version

Willy Tarreau (8):
      DEBUG: mux-h2/flags: fix list of h2c flags used by the flags decoder
      DEBUG: add a tainted flag when ha_panic() is called
      DEBUG: lua: add tainted flags for stuck Lua contexts
      DEBUG: pools: detect that malloc_trim() is in progress
      BUG/MEDIUM: pattern: don't trim pools under lock in pat_ref_purge_range()
      MINOR: mux-h2: always use h2_send() in h2_done_ff(), not h2_process()
      OPTIM: mux-h2: call h2_send() directly from h2_snd_buf()
      BUG/MINOR: server: remove some incorrect free() calls on null elements

---

Reply via email to