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). ---