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