Hi, HAProxy 3.0-dev11 was released on 2024/05/10. It added 43 new commits after version 3.0-dev10.
Another very calm release, thanks to two days off here in France, combined with the return of the sun today :-) Some 3.0 regressions were fixed, such as the broken logs over TCP after recent ring changes, and a QUIC crash when sending STOP_SENDING after the stream above was detached. The RST_STREAM reason code can finally be forwarded to the server for client aborts. This addresses the problem a few users were facing with gRPC where the abort reason was not respected. For now this is purposely limited to only a few reason codes that are relevant to gRPC so that we don't ruin the possibility to later extend that to H3 and maybe H1. We also managed to address the design issue around the buffer_wait code (the stuff that queues tasks waiting for a buffer on low memory). Now tasks are queued by criticality depending on what buffer is missing, so as to guarantee forward progress. It works pretty well for H1 and applets already so that convinced me that we should finish it instead of dropping all that. H2 and a few other places still need to be slightly revisited, and I'd like to also merge a simplification that I experimented with that allows the scheduler to deal itself with waiters instead of having every user think about calling offer_buffers() when leaving. For now that part was put to pause because doing it revealed another recent hard-to-trigger regression that we'll work on early next week. Finally, the build on Illumos was fixed, the log format options are now processed at boot time to improve runtime processing performance, and as usual, a few cleanups, doc and CI updates were included. Overall this is getting good and I think we're on the right track for a release around the end of the month. 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 : 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 (1): BUG/MEDIUM: mux-quic: fix crash on STOP_SENDING received without SD Aurelien DARRAGON (3): OPTIM: log: resolve logformat options during postparsing BUG/MEDIUM: log/ring: broken syslog octet counting DOC: lua: fix filters.txt file location Christopher Faulet (8): MEDIUM: stconn/muxes: Add an abort reason for SE shutdowns on muxes MINOR: mux-h2: Set the SE abort reason when a RST_STREAM frame is received MEDIUM: mux-h2: Forward h2 client cancellations to h2 servers MINOR: mux-quic: Set tha SE abort reason when a STOP_SENDING frame is received MINOR: stconn: Add samples to retrieve about stream aborts MINOR: mux-quic: Add .ctl callback function to get info about a mux connection MINOR: muxes: Add ctl commands to get info on streams for a connection MINOR: connection: Add samples to retrieve info on streams for a connection Ilia Shipitsin (3): BUILD: clock: improve check for pthread_getcpuclockid() CI: add Illumos scheduled workflow CI: netbsd: limit scheduled workflow to parent repo only Patrick Hemmer (3): REGTEST: add tests for acl() sample fetch BUG/MINOR: acl: support built-in ACLs with acl() sample BUG/MINOR: cfgparse: use curproxy global var from config post validation Valentine Krasnobaeva (1): BUG/MINOR: haproxy: only tid 0 must not sleep if got signal Willy Tarreau (24): MINOR: dynbuf: pass a criticality argument to b_alloc() MINOR: dynbuf: add functions to help queue/requeue buffer_wait fields MINOR: dynbuf: use the b_queue()/b_requeue() functions everywhere MEDIUM: dynbuf: make the buffer_wq an array of list heads CLEANUP: tinfo: better align fields in thread_ctx MINOR: dynbuf: provide a b_dequeue() function to detach a bw from the queue MEDIUM: dynbuf: generalize the use of b_dequeue() to detach buffer_wait MEDIUM: dynbuf/stream: re-enable queueing upon failed buffer allocation MEDIUM: dynbuf/stream: do not allocate the buffers in the callback MEDIUM: applet: make appctx_buf_available() only wake the applet up, not allocate MINOR: applet: set the blocking flag in the buffer allocation function MINOR: applet: adjust the allocation criticity based on the requested buffer MINOR: dynbuf/mux-h1: use different criticalities for buffer allocations MEDIUM: dynbuf/mux-h1: do not allocate the buffers in the callback MEDIUM: dynbuf: refrain from offering a buffer if more critical ones are waiting MINOR: stconn: report that a buffer allocation succeeded MINOR: stream: report that a buffer allocation succeeded MINOR: applet: report about buffer allocation success MINOR: mux-h1: report that a buffer allocation succeeded MEDIUM: stream: allocate without queuing when retrying MEDIUM: channel: allocate without queuing when retrying MEDIUM: mux-h1: allocate without queuing when retrying MEDIUM: dynbuf: implement emergency buffers MEDIUM: dynbuf: use emergency buffers upon failed memory allocations ---