Hi, HAProxy 2.6.5 was released on 2022/09/03. It added 182 new commits after version 2.6.4.
This series may look large but it's not. As previously announced, the QUIC code was updated to match the latest and most stable one in 2.7, and this represents 131 patches. One known defect in QUIC remains that we have not yet clearly identified, based on certain error conditions, some connections may never close and will as such leak, as described in issue #1801. That's roughly 0.01% so it's not dramatic but may definitely be observed. For the rest, it's roughly the same as the fixes that went into 2.7-dev5, that I'm mostly copy-pasting here: - trying to access a slow site using the CLI httpclient command could crash if the CLI closed before the site responded - server-side idle connections were often left in TIME_WAIT due to an undesired shutdown() being performed before closing them, resulting in more outgoing ports being used than really necessary. - aborting pipelined HTTP/1.1 transfers could sometimes result in a high CPU usage until the timeout stroke. - reloading peers could compete on the local one and slow down or block the replication. - reloading peers could interrupt a resync in progress if the retry timer triggered before the end. - in certain cases, a misbehaving SPOA agent in asynchronous mode could cause some errors not to be correctly processed, and dead connections not being killed, with new ones being opened to replace them and eating resources. - some ca-file elements could leak during "commit ssl ca-file" - some config parsing error in http-request rules could lead to a segfault during exit when trying to free a rule that was not fully initialized. - the http client couldn't perform DNS resolution on URLs having an explicit port. - the http client would also always work in http-close mode due to its server pool size remaining set to zero. Now connection reuse works as expected. - the master process could create the "default" resolver when reexecuting, leading to a warning on startup when resolv.conf is not available. - using haproxy built with PCRE2_JIT with a lib built without would fail to match. Now it will fall back to the regular match. - agent-check could be delayed by ~200ms due to TCP QUICKACK being disabled by default. - build on OpenBSD would fail due to get_tcp_info() - the warning about unreachable resolvers is now properly shut for the default resolvers when its use is implicit (e.g. created on the fly by the httpclient). The following improvements were also backported: - a new pair of "host_only" and "port_only" converters can be used to parse an address and extract the host part or the port part respectively without having to rely on multiple rules. => that's required to fix the DNS host vs port resolution used by the http client - "http-reuse safe" (the default one) will now support to also use pure idle connections (i.e. not double-validated ones) if l7 retries are configured to address the failure case that reuse-safe was designed for (server closing while sending the request). It should result in a higher reuse ratio on setups with l7 retries. This was part of the reason why the HTTP client couldn't support keep-alive. => required to fix the http client's keepalive - ring: file-backed support was backported. It's trivial and well isolated, and has already proved to be extremely effective at collecting traces of a dying process. Thanks to this there's no more burden of piping socat to tail in the background, nor the CPU consumption and losses that came with it. We've kept a few more debugging improvements for a later version, once they've baked long enough in 2.7. In general, anything that helps bug reporter provide detailed info with limited effort, or helps developers spot a problem without asking for more info is an improvement as it reduces the time spent addressing issues. We'll soon emit 2.5 and 2.4 at least since some of the issues fixed above also affect them. 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-2.6.git/ Git Web browsing : http://git.haproxy.org/?p=haproxy-2.6.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 Thanks to all participants! Willy --- Complete changelog : Amaury Denoyelle (75): MINOR: connection: support HTTP/3.0 for smp_*_http_major fetch MINOR: mux-quic: simplify decode_qcs API MINOR: mux-quic/h3: adjust demuxing function return values BUG/MINOR: h3: fix return value on decode_qcs on error BUG/MINOR: h3: fix incorrect BUG_ON assert on SETTINGS parsing BUG/MEDIUM: h3: fix SETTINGS parsing MINOR: mux-quic: complete BUG_ON on TX flow-control enforcing MINOR: qpack: reduce dependencies on other modules MINOR: qpack: add ABORT_NOW on unimplemented decoding MINOR: qpack: improve decoding function BUG/MINOR: qpack: abort on dynamic index field line decoding BUG/MINOR: qpack: fix build with QPACK_DEBUG BUG/MINOR: qpack: abort on dynamic index field line decoding CLEANUP: mux-quic: adjust comment on qcs_consume() CLEANUP: mux-quic: do not export qc_get_ncbuf REORG: mux-quic: reorganize flow-control fields MINOR: mux-quic: implement accessor for sedesc MEDIUM: mux-quic: refactor streams opening MINOR: mux-quic: rename qcs flag FIN_RECV to SIZE_KNOWN MINOR: mux-quic: emit FINAL_SIZE_ERROR on invalid STREAM size REORG: mux-quic: rename stream initialization function MINOR: mux-quic: rename stream purge function MINOR: mux-quic: add traces on frame parsing functions MINOR: mux-quic: implement qcs_alert() MINOR: mux-quic: filter send/receive-only streams on frame parsing MINOR: mux-quic: do not ack STREAM frames on unrecoverable error MINOR: mux-quic: support stream opening via MAX_STREAM_DATA MINOR: mux-quic: define basic stream states MINOR: mux-quic: use stream states to mark as detached MEDIUM: mux-quic: implement RESET_STREAM emission MEDIUM: mux-quic: implement STOP_SENDING handling CLEANUP: quic: clean up include on quic_frame-t.h MINOR: quic: define a generic QUIC error type MINOR: mux-quic: support app graceful shutdown MINOR: mux-quic/h3: prepare CONNECTION_CLOSE on release MEDIUM: quic: send CONNECTION_CLOSE on released MUX CLEANUP: mux-quic: move qc_release() MINOR: mux-quic: send one last time before release MINOR: h3: store control stream in h3c MINOR: h3: implement graceful shutdown with GOAWAY MINOR: mux-quic: save proxy instance into qcc MINOR: mux-quic: use timeout server for backend conns MEDIUM: mux-quic: adjust timeout refresh MINOR: mux-quic: count in-progress requests MEDIUM: mux-quic: implement http-keep-alive timeout MINOR: h3: support HTTP request framing state MINOR: mux-quic: refresh timeout on frame decoding MINOR: mux-quic: refactor refresh timeout function MEDIUM: mux-quic: implement http-request timeout BUG/MINOR: quic: adjust errno handling on sendto MINOR: quic: replace custom buf on Tx by default struct buffer MINOR: quic: release Tx buffer on each send MINOR: quic: refactor datagram commit in Tx buffer MINOR: quic: skip sending if no frame to send in io-cb BUG/MINOR: mux-quic: open stream on STOP_SENDING BUG/MINOR: quic: fix crash on handshake io-cb for null next enc level MINOR: mux-quic: adjust enter/leave traces MINOR: mux-quic: define protocol error traces CLEANUP: mux-quic: adjust traces level MINOR: mux-quic: define new traces BUG/MEDIUM: mux-quic: fix crash due to invalid trace arg BUG/MINOR: mux-quic: fix crash with traces in qc_detach() MINOR: quic: adjust quic_frame flag manipulation MINOR: h3: report error on control stream close MINOR: qpack: report error on enc/dec stream close BUG/MEDIUM: mux-quic: reject uni stream ID exceeding flow control MINOR: mux-quic: adjust traces on stream init MINOR: mux-quic: add missing args on some traces MINOR: quic: refactor application send BUG/MINOR: quic: do not notify MUX on frame retransmit BUG/MEDIUM: quic: fix crash on MUX send notification REORG: h2: extract cookies concat function in http_htx REGTESTS: add test for HTTP/2 cookies concatenation MEDIUM: h3: concatenate multiple cookie headers CLEANUP: exclude haring with .gitignore Brad Smith (1): BUILD: tcp_sample: fix build of get_tcp_info() on OpenBSD Christopher Faulet (12): BUG/MINOR: tcpcheck: Disable QUICKACK only if data should be sent after connect REGTESTS: Fix prometheus script to perform HTTP health-checks BUG/MEDIUM: spoe: Properly update streams waiting for a ACK in async mode BUG/MEDIUM: peers: Add connect and server timeut to peers proxy BUG/MEDIUM: peers: Don't use resync timer when local resync is in progress BUG/MEDIUM: peers: Don't start resync on reload if local peer is not up-to-date BUG/MINOR: hlua: Rely on CF_EOI to detect end of message in HTTP applets BUG/MINOR: tcpcheck: Disable QUICKACK for default tcp-check (with no rule) BUG/MEDIUM: ssl: Fix a UAF when old ckch instances are released MINOR: quic: Revert recent QUIC commits BUG/MINOR: regex: Properly handle PCRE2 lib compiled without JIT support REGTESTS: http_request_buffer: Add a barrier to not mix up log messages Frédéric Lécaille (56): BUG/MINOR: quic: Wrong list_for_each_entry() use when building packets from qc_do_build_pkt() BUG/MINOR: quic: Safer QUIC frame builders BUG/MINOR: quic: Leak in qc_release_lost_pkts() for non in flight TX packets BUG/MINOR: quic: Stalled connections (missing I/O handler wakeup) CLEANUP: quic: No more use ->rx_list MT_LIST entry point (quic_rx_packet) CLEANUP: quic: Remove a useless check in qc_lstnr_pkt_rcv() BUG/MINOR: quic: Frames added to packets even if not built. MINOR: quic: Replace MT_LISTs by LISTs for RX packets. MINOR: quic: Add a trace to distinguish the datagram from the packets inside MINOR: quic: Add several nonce and key definitions for Retry tag MINOR: quic: Parse long packet version from qc_parse_hd_form() CLEANUP: quid: QUIC draft-28 no more supported MEDIUM: quic: Add QUIC v2 draft support MINOR: quic: Released QUIC TLS extension for QUIC v2 draft MEDIUM: quic: Compatible version negotiation implementation (draft-08) CLEANUP: quic: Remove any reference to boringssl BUILD: quic: Wrong HKDF label constant variable initializations MINOR: quic: Dump version_information transport parameter MINOR: quic: Add two new stats counters for sendto() errors MINOR: quic: Replace pool_zalloc() by pool_malloc() for fake datagrams MEDIUM: quic: xprt traces rework MINOR: quic: Remove useless lock for RX packets CLEANUP: quic: Remove trailing spaces BUG/MEDIUM: quic: Possible use of uninitialized <odcid> variable in qc_lstnr_params_init() BUG/MEDIUM: quic: Wrong use of <token_odcid> in qc_lsntr_pkt_rcv() BUG/MINOR: quic: MIssing check when building TX packets BUG/MINOR: quic: Wrong status returned by qc_pkt_decrypt() BUG/MINOR: quic: Missing initializations for ducplicated frames. BUG/MINOR: quic: Possible crashes when dereferencing ->pkt quic_frame struct member MINOR: quic: Add frame addresses to QUIC_EV_CONN_PRSAFRM event traces BUG/MINOR: quic: Wrong splitted duplicated frames handling MINOR: quic: Add the QUIC connection to mux traces MINOR: quic: Trace fix in qc_release_frm() MINOR: quic: Add reusable cipher contexts for header protection BUG/MINOR: mux-quic: Fix memleak on QUIC stream buffer for unacknowledged data BUG/MINOR: quix: Memleak for non in flight TX packets BUG/MINOR: quic: Wrong list_for_each_entry() use when building packets from qc_do_build_pkt() BUG/MINOR: quic: Safer QUIC frame builders MINOR: quic: Replace MT_LISTs by LISTs for RX packets. Revert "BUG/MINOR: quix: Memleak for non in flight TX packets" BUG/MINOR: quic: Leak in qc_release_lost_pkts() for non in flight TX packets BUG/MINOR: quic: Stalled connections (missing I/O handler wakeup) CLEANUP: quic: No more use ->rx_list MT_LIST entry point (quic_rx_packet) CLEANUP: quic: Remove a useless check in qc_lstnr_pkt_rcv() MINOR: quic: Remove useless traces about references to TX packets Revert "MINOR: quic: Remove useless traces about references to TX packets" BUG/MINOR: quic: Null packet dereferencing from qc_dup_pkt_frms() trace BUG/MINOR: quic: Frames added to packets even if not built. BUG/MINOR: quic: Missing header protection AES cipher context initialisations (draft-v2) MINOR: quic: Add a trace to distinguish the datagram from the packets inside MINOR: quic: Move traces about RX/TX bytes from QUIC_EV_CONN_PRSAFRM event BUG/MINOR: quic: TX frames memleak BUG/MINOR: quic: Do not ack when probing MINOR: quic: Add TX frames addresses to traces to several trace events MINOR: quic: Trace typo fix in qc_release_frm() BUG/MINOR: quic: Frames leak during retransmissions Tim Duesterhus (1): CLEANUP: Re-apply xalloc_size.cocci (2) William Lallemand (11): BUG/MINOR: resolvers: return the correct value in resolvers_finalize_config() BUG/MINOR: mworker: does not create the "default" resolvers in wait mode MINOR: resolvers: shut the warning when "default" resolvers is implicit DOC: configuration: do-resolve doesn't work with a port in the string MINOR: sample: add the host_only and port_only converters BUG/MINOR: httpclient: fix resolution with port DOC: configuration.txt: do-resolve must use host_only to remove its port. BUG/MINOR: ssl: fix deinit of the ca-file tree BUG/MINOR: ssl: leak of ckch_inst_link in ckch_inst_free() BUG/MINOR: ssl: revert two wrong fixes with ckhi_link BUG/MINOR: ssl: leak of ckch_inst_link in ckch_inst_free() v2 Willy Tarreau (26): BUG/MEDIUM: applet: fix incorrect check for abnormal return condition from handler BUG/MINOR: applet: make the call_rate only count the no-progress calls BUG/MEDIUM: mux-h1: do not refrain from signaling errors after end of input BUG/MINOR: dev/udp: properly preset the rx address size CLEANUP: quic: use task_new_on() for single-threaded tasks CLEANUP: pool/quic: remove suffix "_pool" from certain pool names BUILD: ring: forward-declare struct appctx to avoid a build warning MINOR: ring: support creating a ring from a linear area MINOR: ring: add support for a backing-file BUILD: sink: replace S_IRUSR, S_IWUSR with their octal value MINOR: ring: archive a previous file-backed ring on startup MINOR: sink/ring: rotate non-empty file-backed contents only DEV: haring: add a simple utility to read file-backed rings DEV: haring: support remapping LF in contents with CR VT BUILD: debug: make sure debug macros are never empty BUG/MEDIUM: mux-h1: always use RST to kill idle connections in pools MINOR: backend: always satisfy the first req reuse rule with l7 retries BUG/MINOR: h2: properly set the direction flag on HTX response BUG/MEDIUM: httpclient: always detach the caller before self-killing BUG/MINOR: httpclient: keep-alive was accidentely disabled BUG/MINOR: mux-h2: fix the "show fd" dest buffer for the subscriber BUG/MINOR: mux-h1: fix the "show fd" dest buffer for the subscriber BUG/MINOR: mux-fcgi: fix the "show fd" dest buffer for the subscriber DEBUG: stream: minor rearrangement of a few fields in struct stream. MINOR: debug: report applet pointer and handler in crashes when known BUG/MINOR: http-act: initialize http fmt head earlier ---