Hi,

HAProxy 2.6-dev10 was released on 2022/05/14. It added 74 new commits
after version 2.6-dev9.

A few bugs were fixed and the fixes were already backported to previous
branches (such as DNS locking issues, or state-file line increase).

There was another bunch of interesting updates on QUIC. We now support
sending a stateless reset, which is important as it's the only way to
reset an unknown connection (e.g. after the process has restarted or has
been switched to a backup server) and avoid the clients staying hung.
This requires setting a per-cluster secret key. The performance of POST
over lossy networks should have improved a little bit thanks to the
implementation of non-contiguous buffers that allow to more easily store
and process out-of-order frames. A number of other small improvements and
fixes were brought there, as usual.

A global option was added to explicitly permit payload on GET/HEAD/DELETE
requests in HTTP/1.0. These are disabled by default since 2.5 according to
the latest HTTP spec (RFC9110 to be), but some users need them to support
old clients on specific applications.

A change of behavior was applied to certificates and CA-files: when a
directory is configured, previously we would load all files from that
directory. Now only the files not beginning with "." are considered. It
seems that most other tools loading from directories already proceed
like this and this difference in haproxy was causing trouble to some
users.

The code now builds without warnings on GCC-12.

A minor cosmetic change was done in the internal chaining of layers to
have more symmetrical relations between entities. This should make the
internal architecture a bit less difficult to grasp. However, there
remains some naming confusion that I really want to address before the
release because, for example, the link between a "stream" and a
"connection" used to be called a "conn_stream" but nowadays there may
be something different than a stream on top (e.g. a check) and something
different than a connection at the bottom (e.g. an applet). This is
really troubling at certain places and I'm a bit worried it could induce
bugs in the long term due to misunderstandings. I want this to be done
before the release so that we don't have a specific version to deal with
during backports (with the risk of getting something wrong). We'll still
work on this next week. It might produce numerous patches (or touch many
files) but this will be mechanical and will not change the produced code.

Among the remaining things that I have in mind for the release:
  - there's still something incomplete regarding QUIC flow control,
    so POSTs are limited to small objects and there can't be more than
    roughly 50000 requests over a single connection. My understanding
    is that it's not that difficult, there were just more important
    things to finish before, so this will normally be OK for the release.

  - William wanted to add some OCSP path settings in crt-lists, apparently
    this is easy so I'm fine with this being done late.

  - Christopher is finishing the patch set that allows to delay applet
    initialization and which should permit outgoing peers connection to
    start on multiple threads instead of all using the first one like
    today.

  - Fred and Amaury would like the QUIC retry mechanism to be operational
    for the release (that's the equivalent of SYN cookies, and will be
    useful in case of spoofing attacks).

  - I'd like to finish to address the processing of the "proto" keyword
    on the "bind" lines so that it cannot specify a protocol that is
    incompatible with the listening socket, and that it's not needed
    anymore with QUIC.

  - We'll still have some doc updates to add, and write a few words
    about QUIC and the changes it brings.

Depending on how things go and the level of extra testing required for
the final changes, there may or may not be one extra dev release next
week. If we see by the end of the week that almost nothing changed, we
could decide to directly release. If there are some sensitive enough
changes, we'll emit a dev11.

As such, please do test this one as if you were going to deploy it next week.

Please find the usual URLs below :
   Site index       : http://www.haproxy.org/
   Documentation    : http://docs.haproxy.org/
   Wiki             : https://github.com/haproxy/wiki/wiki
   Discourse        : http://discourse.haproxy.org/
   Slack channel    : https://slack.haproxy.org/
   Issue tracker    : https://github.com/haproxy/haproxy/issues
   Sources          : http://www.haproxy.org/download/2.6/src/
   Git repository   : http://git.haproxy.org/git/haproxy.git/
   Git Web browsing : http://git.haproxy.org/?p=haproxy.git
   Changelog        : http://www.haproxy.org/download/2.6/src/CHANGELOG
   Pending bugs     : http://www.haproxy.org/l/pending-bugs
   Reviewed bugs    : http://www.haproxy.org/l/reviewed-bugs
   Code reports     : http://www.haproxy.org/l/code-reports
   Latest builds    : http://www.haproxy.org/l/dev-packages

Willy
---
Complete changelog :
Amaury Denoyelle (13):
      MINOR: ncbuf: define non-contiguous buffer
      MINOR: ncbuf: complete API and define block interal abstraction
      MINOR: ncbuf: optimize storage for the last gap
      MINOR: ncbuf: implement insertion
      MINOR: ncbuf: define various insertion modes
      MINOR: ncbuf: implement advance
      MINOR: ncbuf: write unit tests
      BUG/MINOR: ncbuf: fix coverity warning on uninit sz_data
      MINOR: xprt_quic: adjust flow-control according to bufsize
      MEDIUM: mux-quic/h3/hq-interop: use ncbuf for bidir streams
      MEDIUM: mux-quic/h3/qpack: use ncbuf for uni streams
      CLEANUP: mux-quic: remove unused fields for Rx
      CLEANUP: quic: remove unused quic_rx_strm_frm

Boyang Li (2):
      BUG/MEDIUM: lua: fix argument handling in data removal functions
      DOC/MINOR: fix typos in the lua-api document

Christopher Faulet (2):
      MINOR: mux-h1: Add global option accpet payload for any HTTP/1.0 requests
      CLEANUP: mux-h1: Fix comments and error messages for global options

Emeric Brun (1):
      BUG/MAJOR: dns: multi-thread concurrency issue on UDP socket

Frédéric Lécaille (16):
      MINOR: quic: Add a debug counter for sendto() errors
      BUG/MINOR: quic: Dropped peer transport parameters
      BUG/MINOR: quic: Wrong unit for ack delay for incoming ACK frames
      MINOR: quic: Congestion controller event trace fix (loss)
      MINOR: quic: Add correct ack delay values to ACK frames
      MINOR: config: Add "cluster-secret" new global keyword
      MINOR: quic-tls: Add quic_hkdf_extract_and_expand() for HKDF
      MINOR: quic: new_quic_cid() code moving
      MINOR: quic: Initialize stateless reset tokens with HKDF secrets
      MINOR: qc_new_conn() rework for stateless reset
      MINOR: quic: Stateless reset token copy to transport parameters
      MINOR: quic: Send stateless reset tokens
      MINOR: quic: Short packets always embed a trailing AEAD TAG
      CLEANUP: quic: wrong use of eb*entry() macro
      CLEANUP: quic: Useless use of pointer for quic_hkdf_extract()
      CLEANUP: quic_tls: QUIC_TLS_IV_LEN defined two times

Remi Tricot-Le Breton (1):
      BUG/MINOR: ssl: Fix typos in crl-file related CLI commands

William Lallemand (4):
      MINOR: ssl: ignore dotfiles when loading a dir w/ ca-file
      MEDIUM: ssl: ignore dotfiles when loading a dir w/ crt
      DOC: configuration: add the httpclient keywords to the global keywords 
index
      BUG/MEDIUM: wdt: don't trigger the watchdog when p is unitialized

Willy Tarreau (34):
      MINOR: compiler: add a new macro to set an attribute on an enum when 
possible
      BUILD: stats: conditionally mark obsolete stats states as deprecated
      BUILD: ssl: work around bogus warning in gcc 12's -Wformat-truncation
      BUILD: debug: work around gcc-12 excessive -Warray-bounds warnings
      BUILD: listener: shut report of possible null-deref in listener_accept()
      BUG/MEDIUM: ssl: fix the gcc-12 broken fix :-(
      DOC: install: update gcc version requirements
      BUILD: makefile: add -Wfatal-errors to the default flags
      BUG/MINOR: mux-h2: mark the stream as open before processing it not after
      MINOR: mux-h2: report a trace event when failing to create a new stream
      MINOR: conn_stream: make cs_set_error() work on the endpoint instead
      CLEANUP: mux-h1: always take the endp from the h1s not the cs
      CLEANUP: mux-h2: always take the endp from the h2s not the cs
      CLEANUP: mux-pt: always take the endp from the context not the cs
      CLEANUP: mux-fcgi: always take the endp from the fstrm not the cs
      CLEANUP: mux-quic: always take the endp from the qcs not the cs
      CLEANUP: applet: use the appctx's endp instead of cs->endp
      MINOR: conn_stream: add a pointer back to the cs from the endpoint
      MINOR: mux-h1: remove the now unneeded h1s->cs
      MINOR: mux-h2: make sure any h2s always has an endpoint
      MINOR: mux-h2: remove the now unneeded conn_stream from the h2s
      MINOR: mux-fcgi: make sure any stream always has an endpoint
      MINOR: mux-fcgi: remove the now unneeded conn_stream from the fcgi_strm
      MINOR: mux-quic: remove the now unneeded conn_stream from the qcs
      MINOR: mux-pt: remove the now unneeded conn_stream from the context
      CLEANUP: muxes: make mux->attach/detach take a conn_stream endpoint
      MINOR: applet: replace cs_applet_shut() with appctx_shut()
      MINOR: applet: add appctx_strm() and appctx_cs() to access common fields
      CLEANUP: applet: remove the unneeded appctx->owner
      CLEANUP: conn_stream: merge cs_new_from_{mux,applet} into 
cs_new_from_endp()
      MINOR: ext-check: indicate the transport and protocol of a server
      BUG/MEDIUM: mux-quic: fix a thinko in the latest cs/endpoint cleanup
      MINOR: tools: improve error message accuracy in str2sa_range
      MINOR: config: make sure never to mix dgram and stream protocols on a 
bind line

vigneshsp (1):
      BUG/MINOR: server: Make SRV_STATE_LINE_MAXLEN value from 512 to 2kB (2000 
bytes).

---

Reply via email to