HAProxy 3.0-dev3 was released on 2024/02/10. It added 149 new commits
after version 3.0-dev2.

A number of crash causes were addressed in this version in various areas,
such as QUIC, pools, or OCSP updates, some of which were already merged
into latest 2.9, and some which might possibly warrant another 2.9 soon
before we produce other stable releases. We'll see.

Aside bugs, changes were a bit varied this time:

  - prometheus: a new registration mechanism was added to permit
    to register metrics per module (e.g. stick-tables, resolvers etc).
    The extra counters are also dumped if requested now (frontend,
    backend, listener, server).

  - quic: the fast-forwarding now takes the flow control into account,
    resulting in a reduction of the number of wakeups and better filling
    of packets. The internal send API was reworked and simplified and one
    buffer copy could be removed. Some minor fixes and cleanups were done
    in the cubic congestion controller.

  - applet: most of the internal API rework was done, which simpifies
    the upper layers and the applet code as well (for those that were
    converted). It's expected to work fine, but the possibility to have
    woken up long dormant bugs cannot be totally excluded, so if anyone
    notices anomalies with the CLI, stats, cache or peers, please report

  - the "glitch" counter that's used inside the H2 mux to count protocol
    incompatibilities or strangeness now has its own stick-table type so
    that it's possible to detect connection loops from a known bogus
    client and reject them before they cause trouble again.

  - the H1 mux now also supports zero-copy forwarding for chunks of unknown
    size (i.e. those larger than a buffer).

  - the set-mark/set-tos actions were extended to support an expression in
    addition of the constant, and were extended to also support the backend
    side. This can for example be used to select an outgoing link from a
    single IP address. The new backend actions are called "set-bc-mark" and
    "set-bc-tos", and by analogy new frontend actions called "set-fc-mark"
    and "set-fc-tos" were created, and the old actions are aliases of these
    last ones.

  - the BUG_ON() and ABORT_NOW() debugging statement were adjusted to
    prevent the compiler from merging them. We indeed scratched our heads
    quite a bit on some code that appeared to have crashed at the wrong
    location due to compiler optimization!

  - the CLI supports a new command, "wait", that can pause for the specified
    delay. It optionally supports waiting for specific events; for now the
    only supported event is that a server loses its last connection and
    becomes totally unused hence removable ("srv-unused"). This is helpful
    before calling "del server" on the CLI to avoid an error when existing
    connections were still present. The condition might be renamed to
    "srv-removable" or something like this in the future to remove a bit
    of ambiguity.

  - a few more sample fetches corresponding to certain log-format tags were
    added (txn.redispatched, bc_be_queue, bc_srv_queue, etc).

  - haproxy -dD will now report suspicious ACL pattern values which look
    like known ACL/sample fetch keywords.

  - quite a bit of doc updates: many misplaced keywords and typos,
    wait-for-body clarifications, dedicated httpclient section, wolfssl
    clarifications, recommendation of pcre2.

  - CI updates (github actions v4 and other small changes).

  - new regtests (OCSP)

And that's about all for this version. I still intend to issue 2.8 next
week as time permits, and possibly another 2.9 if there are too many
stuff pending for 2.8 that are not in 2.9 yet.

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.0/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.0/src/CHANGELOG
   Dataplane API    : 
   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

Complete changelog :
Abhijeet Rastogi (1):
      DOC: install: recommend pcre2

Amaury Denoyelle (16):
      MINOR: h3: add traces for stream sending function
      BUG/MEDIUM: h3: do not crash on invalid response status code
      BUG/MEDIUM: qpack: allow 6xx..9xx status codes
      BUG/MEDIUM: quic: fix crash on invalid qc_stream_buf_free() BUG_ON
      BUG/MINOR: ssl/quic: fix 0RTT define
      MINOR: mux-quic: prepare for earlier flow control update
      MINOR: mux-quic: define a flow control related type
      MEDIUM: mux-quic: limit stream flow control on snd_buf
      MEDIUM: mux-quic: limit conn flow control on snd_buf
      MINOR: mux-quic: remove unneeded sent-offset fields
      MINOR: mux-quic: check fctl during STREAM frame build
      MAJOR: mux-quic: remove intermediary Tx buffer
      MEDIUM: mux-quic: simplify sending API
      MEDIUM: mux-quic: release Tx buf on too small room
      MEDIUM: mux-quic: properly handle conn Tx buf exhaustion
      MINOR: mux-quic: realign Tx buffer if possible

Aurelien DARRAGON (17):
      CLEANUP: connection: remove obsolete comment in header file
      OPTIM: connection: progressive hash for conn_calculate_hash()
      MINOR: tcp_act: fix alphabetical ordering of tcp request content actions
      MINOR: tcp-act: Rename "set-{mark,tos}" to "set-fc-{mark,tos}"
      MINOR: hlua: Rename set_{tos, mark} to set_fc_{tos, mark}
      MEDIUM: tcp-act: <expr> support for set-fc-{mark,tos} actions
      MEDIUM: tcp-act/backend: support for set-bc-{mark,tos} actions
      DOC: config: fix typo for '%ms' log format alternative
      DOC: config: fix ordering for "txn.*" fetches
      MINOR: stream: add "txn.redispatch" fetch
      BUILD: debug: remove leftover parentheses in ABORT_NOW()
      DOC: config: fix misplaced "txn.conn_retries"
      DOC: config: fix typos for "bytes_{in,out}"
      DOC: config: fix misplaced "bytes_{in,out}"
      DOC: config: add more custom log format table alternatives
      MINOR: stream: rename "txn.redispatch" to "txn.redispatched"
      MINOR: sample: implement bc_{be,srv}_queue samples

Christopher Faulet (57):
      BUG/MINOR: h1: Don't support LF only at the end of chunks
      BUG/MEDIUM: h1: Don't support LF only to mark the end of a chunk size
      MINOR: stats: Be able to access to registered stats modules from anywhere
      MEDIUM: stats: Be able to access a specific field into a stats module
      MINOR: promex: Add a param to override the description when a metric is 
      MINOR: promex: Add info in the promex context to dump extra counters
      MEDIUM: promex: Dump frontends extra counters if requested
      MEDIUM: promex: Dump backends extra counters if requested
      MEDIUM: promex: Dump servers extra counters if requested
      MEDIUM: promex: Dump listeners extra counters if requested
      DOC: promex: Add documentation about extra-counters
      MINOR: promex: Always limit the number of labels dumped for each metric
      MEDIUM: promex: Simplify the context using generic pointers for restart 
      MINOR: promex: Remove unsued htx parameter when a metric is dumped
      MEDIUM: promex: Add a registration mechanism to support modules
      MEDIUM: promex: Dump metrics of registered modules with a way to filter 
      MEDIUM: promex/stick-table: Dump stick-table metrics via a promex module
      MEDIUM: promex/resolvers: Dump resolvers metrics via a promex module
      MINOR: promex: Rename dump functions to use the right wording
      MINOR: promex: Always pass the final name and description to 
      MEDIUM: promex: Add support for filters on metric names
      REGTESTS: promex: Adapt script to be less verbose
      MINOR: task: Move wait_event in the task header file
      MINOR: stconn: Be able to detect applets using HTX
      MINOR: stconn: Explicitly use an appctx to attach a stconn on it
      MINOR: stconn: Be prepared to handle error when a SC is attached to an 
      MINOR: applet: Add dedicated IN/OUT buffers for appctx
      MINOR: applet: Add traces to debug receive/send and block/wake events
      MINOR: applet: Add support for callback functions to exchange data with 
      MINOR: applet: Implement default functions to exchange data with channels
      MEDIUM: stconn: Add functions to handle applets I/O from the SC layer
      MEDIM: applet: Add the applet handler based on IN/OUT buffers
      MINOR: applet: Show IN/OUT buffers in trace messages when used
      MINOR: applet: Add flags on the appctx and stop abusing its state
      MINIOR: applet: Add flags to deal with ends of input, ends of stream and 
      MINOR: applet: Remove appctx state field to only used the flags
      MINOR: applet: Add an appctx flag to report shutdown to applets
      MEDIUM: applet: Use appctx flags to report EOS/EOI/ERROR to SE
      MINOR: applet: Add callback function to deal with zero-copy forwarding
      MEDIUM: applet: Add support for zero-copy forwarding from an applet
      MINOR: applet: Automatically handle applets having more data for the 
      MEDIUM: stats: Don't interrupt processing on partial post
      MAJOR: stats: Update HTTP stats applet to handle its own buffers
      MEDIUM: cache: Temporarily remove zero-copy forwarding support
      MAJOR: cache: Update HTTP cache applet to handle its own buffers
      MAJOR: cache: Send cached objects using zero-copy forwarding
      MINOR: stconn: Add support for flags during zero-copy forwarding 
      MINOR: mux-h1: Be able to define the length of a chunk size when it is 
      MEDIUM: stconn: Nofify requested size during zero-copy forwarding nego is 
      MINOR: mux-h1: Stop zero-copy forwarding during nego for too big 
requested size
      MEDIUM: mux-h1: Support zero-copy forwarding for chunks with an unknown 
      MAJOR: stats: Send stats dump over HTTP using zero-copy forwarding
      MEDIUM: applet: Simplify a bit API to exchange data with applets
      MINOR: cache: Remove unsed .data_sent field from the cache applet context
      MINOR: applet: Use an option to disable zero-copy forwarding for all 
      MINOR: applet: Identify applets using their own buffers via a flag
      BUG/MINOR: applet: Always release empty appctx buffers after processing

Frederic Lecaille (5):
      BUG/MINOR: quic: Wrong ack ranges handling when reaching the limit.
      BUILD: quic: Variable name typo inside a BUG_ON().
      CLEANUP: quic: Code clarifications for QUIC CUBIC (RFC 9438)
      BUG/MINOR: quic: fix possible integer wrap around in cubic window 
      MINOR: quic: Stop using 1024th of a second.

Ilya Shipitsin (2):
      CI: github: abandon asan matrix.py helper
      CI: ssl: add yet another OpenSSL download fallback

Lukas Tribus (2):
      DOC: httpclient: add dedicated httpclient section
      DOC: install: clarify WolfSSL chroot requirements

Miroslav Zagorac (1):
      CLEANUP: log: deinitialization of the log buffer in one function

Olivier Houchard (1):
      BUG/MAJOR: ssl_sock: Always clear retry flags in read/write functions

Remi Tricot-Le Breton (9):
      BUG/MINOR: ssl: Fix error message after ssl_sock_load_ocsp call
      BUG/MINOR: ssl: Duplicate ocsp update mode when dup'ing ckch
      MINOR: ssl: Use OCSP_CERTID instead of ckch_store in 
      BUG/MINOR: ssl: Clear the ckch instance when deleting a crt-list line
      BUG/MEDIUM: ocsp: Separate refcount per instance and per store
      BUG/MINOR: ssl: Destroy ckch instances before the store during deinit
      BUG/MINOR: ssl: Reenable ocsp auto-update after an "add ssl crt-list"
      REGTESTS: ssl: Add OCSP related tests
      REGTESTS: ssl: Fix empty line in cli command input

Thayne McCombs (1):
      DOC: configuration: clarify http-request wait-for-body

Tim Duesterhus (1):
      CI: Update to actions/cache@v4

William Lallemand (3):
      MINOR: ssl: add HAVE_SSL_0RTT constant
      MINOR: ssl: rename HA_OPENSSL_HAVE_0RTT_SUPPORT constant to 
      MEDIUM: ssl/quic: always compile the ssl_conf.early_data test

Willy Tarreau (33):
      BUG/MINOR: h1-htx: properly initialize the err_pos field
      BUG/MEDIUM: h1: always reject the NUL character in header values
      CLEANUP: h1: remove unused function h1_measure_trailers()
      MINOR: compiler: add a new DO_NOT_FOLD() macro to prevent code folding
      MINOR: debug: make sure calls to ha_crash_now() are never merged
      MINOR: debug: make ABORT_NOW() store the caller's line number when using 
      BUG/MINOR: diag: always show the version before dumping a diag warning
      BUG/MINOR: diag: run the final diags before quitting when using -c
      MINOR: acl: add extra diagnostics about suspicious string patterns
      MINOR: debug: make BUG_ON() catch build errors even without DEBUG_STRICT
      MINOR: debug: support passing an optional message in ABORT_NOW()
      MINOR: debug: add an optional message argument to the BUG_ON() family
      DEBUG: make the "debug dev {debug|warn|check}" command print a message
      BUG/MINOR: mux-h2: count rejected DATA frames against the connection's 
flow control
      MINOR: mux-h2: count excess of CONTINUATION frames as a glitch
      MINOR: mux-h2: count late reduction of INITIAL_WINDOW_SIZE as a glitch
      DOC: internal: update missing data types in peers-v2.0.txt
      MEDIUM: stick-tables: add a new stored type for glitch_cnt and glitch_rate
      MINOR: session: add the necessary functions to update the per-session 
      MEDIUM: mux-h2: update session trackers with number of glitches
      BUG/MINOR: server/cli: add missing LF at the end of certain notice/error 
      BUG/MINOR: vars/cli: fix missing LF after "get var" output
      BUG/MEDIUM: cli: fix once for all the problem of missing trailing LFs
      MINOR: cli: make sure to always print a pending message after release()
      MINOR: cli: always reset the applet task's timeout
      MINOR: cli: add a new "wait" command to wait for a certain delay
      MINOR: server: split the server deletion code in two parts
      MINOR: cli/wait: make the wait command support a more detailed help 
      MINOR: cli/wait: also support an unrecoverable failure status
      MINOR: cli/wait: also pass up to 4 arguments to the external conditions
      MINOR: cli/wait: add a condition to wait on a server to become unused
      BUILD: address a few remaining calloc(size, n) cases
      BUG/MEDIUM: pool: fix rare risk of deadlock in pool_flush()


Reply via email to