Hi,
HAProxy 2.7-dev5 was released on 2022/09/02. It added 79 new commits
after version 2.7-dev4.
This version contains almost only bug fixes since 2.7-dev4, which seems
to reflect pretty well the team's activity over the last two weeks. The
most visible one for some users is the fix for the regression affecting
the startup in master mode without master CLI after the log-forward fix.
The rest is spread all over the code, but I'll try to mention those most
likely to be met:
- cpu-map was not setting the affinity correctly when thread 1 was
specified
- 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.
- quite a number of small QUIC issues were addressed, some of which were
causing crashes, some leaks, and some just being bad behaviors. At
least we could close long-lasting issue #1808. There's still a rare
case that causes some streams not to be closed but the conditions
needed for it to happen are too complicated to understand and the
risk of breaking stuff is high, so we'll wait for Amaury to be back :-)
- 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.
And the improvements:
- the httpclient now enables ALPN for https connections with "h2,http/1.1"
and will thus be able to communicate with servers over HTTP/2 (which
would be nice for APIs and various low-latency services in general).
- 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.
- the peers applet will now limit the number of updates sent at once so
as not to cause unbearable latencies when large buffers are configured.
- "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.
- some debugging improvements ("show sess all" now dumps the mux state,
more QUIC traces)
There were a few other minor fixes/improvements that I don't remember about
anymore, please check the change log below for more info.
I hope next week will be calmer in terms of bugs so that we can get back
to doing real work. The encouraging point is that most of the issues above
were not specific to 2.7 nor 2.6 so we can hope for calmer times. We'll
produce a new series of stable releases shortly.
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.7/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.7/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 :
Brad Smith (1):
BUILD: tcp_sample: fix build of get_tcp_info() on OpenBSD
Christopher Faulet (11):
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
BUG/MINOR: regex: Properly handle PCRE2 lib compiled without JIT support
REGTESTS: http_request_buffer: Add a barrier to not mix up log messages
Emeric Brun (1):
BUG/MAJOR: mworker: fix infinite loop on master with no proxies.
Frédéric Lécaille (22):
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
William Lallemand (12):
REGTESTS: launch http_reuse_always in mworker mode
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 (32):
BUG/MEDIUM: cpu-map: fix thread 1's affinity affecting all threads
MINOR: cpu-map: remove obsolete diag warning about combined ranges
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
MEDIUM: peers: limit the number of updates sent at once
BUG/MEDIUM: mux-h1: do not refrain from signaling errors after end of
input
BUG/MINOR: epoll: do not actively poll for Rx after an error
MINOR: raw-sock: don't try to send if an error was already reported
BUG/MINOR: dev/udp: properly preset the rx address size
BUILD: debug: make sure debug macros are never empty
MINOR: sink/ring: rotate non-empty file-backed contents only
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: only ask for more room on failed writes
BUG/MINOR: httpclient: keep-alive was accidentely disabled
MEDIUM: httpclient: enable ALPN support on outgoing https connections
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
MINOR: mux-h2: extract the stream dump function out of h2_show_fd()
MINOR: mux-h2: extract the connection dump function out of h2_show_fd()
MINOR: muxes: add a "show_sd" helper to complete "show sess" dumps
MINOR: mux-h2: provide a "show_sd" helper to output stream debugging info
MINOR: mux-h2: insert line breaks in "show sess all" output for legibility
MINOR: mux-quic: provide a "show_sd" helper to output stream debugging
info
MINOR: mux-h1: split "show_fd" into connection and stream
MINOR: mux-h1: provide a "show_sd" helper to output stream debugging info
BUG/MINOR: http-act: initialize http fmt head earlier
---