Hi,
HAProxy 3.1-dev4 was released on 2024/07/24. It added 113 new commits
after version 3.1-dev3.
Some nice goodies came in this version:
- QUIC now has support for sending frames using GSO, which can save
quite some significant CPU cycles since a single syscall will be used
for multiple datagrams. We found that there are restrictions to this
such as certain network interfaces not supporting it (veth for example)
so the mechanism implements an automatic fallback when the failure is
detected.
- SPOE: the old applet-based architecture was replaced with the new
mux-based one which allows idle connections sharing between threads,
as well as queuing, load balancing, stickiness etc per request instead
of per-connection and adds a lot of flexibility to the engine. We'd
appreciate it a lot if SPOE users would take some time to verify that
it works at least as well for them as before (and hopefully even
better). Some good ideas may spark. Please check Christopher's
response to the SPOE thread for more info.
- rings: the outgoing connections to a log server are now balanced over
multiple threads, not just the first one, and the "max-reuse" server
parameter is honored to force connections to be broken and recreated
after a given number of messages in order to improve rebalancing as
well as allow to gracefully renew backend connections (e.g. in case
another layer of LB sits there).
- ocsp: some processing was refined to better handle a corner case where
the issuer chain is not in the same PEM file, though it also slightly
changes how this is handled on the CLI.
- variables: new "parent" scopes (psess, ptxn, preq, pres) to access the
parent stream's sess/txn/req/res variables. For now, only used with
SPOE to access the parent stream, but might be usable for other things
later.
- more info collected in post_mortem for "show dev" (e.g. process'
boot and current limits etc).
- speedup of startup with very high maxconn and thread counts by only
scanning the known used FD range.
We also fixed a few bugs, a very difficult to reproduce one which can make
the H2 mux loop on certain truncated frames, needlessly wasting CPU until
a restart, an issue with the bwlim filter which could cause wakeup loops
due to a timeout in the past, a bug where "show threads" can crash the
process on setups with less than 16 threads, a missing unlock in SSL OCSP
code's error path, some late boot-time warnings that were not properly
accounted regarding the zero-warning restriction, and a few other minor
issues.
And as usual there were some code cleanups (e.g. some "global" keywords
parsers started to move to their own functions), cleanup of FD limits
handling code, some doc updates (e.g. dedicated section about variables,
OCSP and http-keep-alive section), and regtests.
Even though it contains significant changes it's not expected to be
broken (and it's already running on haproxy.org). SPOE is a big change
that might have affect some of its users in case there would be an
uncaught issue there (which is one extra reason for testing now), so
please watch when testing it.
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.1/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.1/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 (12):
CLEANUP: quic: remove obsolete comment on send
MINOR: quic: extend detection of UDP API OS features
MINOR: quic: activate UDP GSO for QUIC if supported
MINOR: quic: define quic_cc_path MTU as constant
MINOR: quic: add GSO parameter on quic_sock send API
MAJOR: quic: support GSO when encoding datagrams
MEDIUM: quic: implement GSO fallback mechanism
MINOR: quic: add counters of sent bytes with and without GSO
CLEANUP: proto: rename TID affinity callbacks
CLEANUP: quic: rename TID affinity elements
BUG/MINOR: do not close uninit FD in quic_test_socketops()
BUG/MINOR: stick-table: fix crash for src_inc_gpc() without stkcounter
Aurelien DARRAGON (15):
MINOR: server: better mt_list usage for node migration (prev_deleted
handling)
MEDIUM: sink: start applets asynchronously
OPTIM: sink: balance applets accross threads
BUILD: tree-wide: cast arguments to tolower/toupper to unsigned char (2)
BUG/MEDIUM: sink: properly init applet under sft lock
MINOR: sink: unify and sink_forward_io_handler() and
sink_forward_oc_io_handler()
MINOR: sink: Remove useless test on SE_FL_SHR/SHW flags
MINOR: sink: merge sink_forward_io_handler() with
sink_forward_oc_io_handler()
MINOR: sink: add some comments about sft->appctx usage in applet handlers
MINOR: sink: distinguish between hard and soft close in
_sink_forward_io_handler()
MEDIUM: sink: don't set NOLINGER flag on the outgoing stream interface
MINOR: ring: count processed messages in ring_dispatch_messages()
MINOR: sink: add processed events counter in sft
MEDIUM: sink: "max-reuse" support for sink servers
OPTIM: sink: consider threads' current load when rebalancing applets
Christopher Faulet (53):
BUG/MEDIUM: bwlim: Be sure to never set the analyze expiration date in
past
BUG/MINOR: session: Eval L4/L5 rules defined in the default section
CLEANUP: stconn: Fix a typo in comments for SE_ABRT_SRC_*
MEDIUM: spoe: Remove fragmentation support
MEDIUM: spoe: Remove async mode support
MINOR: spoe: Use only a global engine-id per agent
MINOR: spoe: Remove debugging
MAJOR: spoe: Remove idle applets and pipelining support
MINOR: spoe: Remove the dedicated SPOE applet task
MEDIUM: proxy/spoe: Add a SPOP mode
MEDIUM: applet: Add a .shut callback function for applets
MINOR: connection: No longer include stconn type header in connection-t.h
MINOR: stconn: Use a dedicated function to get the opposite sedesc
MINOR: spoe: Rename some flags and constant to use SPOP prefix
MINOR: spoe: Dynamically alloc the message list per event of an agent
MINOR: spoe: Move all stuff regarding the filter/applet in the C file
MINOR: spoe: Move spoe_str_to_vsn() into the header file
MEDIUM: mux-spop: Introduce the SPOP multiplexer
MEDIUM: check/spoe: Use SPOP multiplexer to perform SPOP health-checks
MAJOR: spoe: Rewrite SPOE applet to use the SPOP mux
CLEANUP: spoe: Uniformize function definitions
MINOR: spoe: Add internal sample fetch to retrieve the SPOE engine ID
MEDIUM: spoe: Set a specific name for the connection pool of SPOP servers
MINOR: backend: Remove test on HTX streams to reuse idle connections on
connect
MEDIUM: spoe: Force the reuse 'always' mode for SPOP backends
MINOR: mux-spop: Use a dedicated function to update the SPOP connection
timeout
MAJOR: mux-spop: Make the SPOP connections reusable
MINOR: stats-html: Display reuse ratio for spop connections
MEDIUM: spoe: Directly xfer NOTIFY frame when SPOE applet is created
MEDIUM: spoe: Directly receive ACK frame in the SPOE context buffer
MEDIUM: mux-spop/spoe: Save negociated max-frame-size value in the mux
MINOR: spoe: Remove the spop version from the SPOE appctx context
MEDIUM: mux-spop: Add checks on received frames
MEDIUM: mux-spop: Announce the pipeling support if possible
MEDIUM: spoe: Forward SPOE context error to the SPOE applet
MEDIUM: spoe: Make the SPOE applet use its own buffers
DOC: spoe: Update SPOE documentation to reflect recent refactoring
BUG/MINOR: server: Don't warn fallback IP is used during init-addr
resolution
BUG/MINOR: cli: Atomically inc the global request counter between CLI
commands
MINOR: stream: Add a pointer to set the parent stream
MINOR: vars: Fill a description instead of hash and scope when a name is
parsed
MINOR: vars: Use a description to set/unset a variable instead of its
hash and scope
MEDIUM: vars: Be able to parse parent scopes for variables
MINOR: vars: Use a variable description to get variables of a specific
scope
MEDIUM: vars: Be able to retrieve variable of the parent stream, if any
MEDIUM: spoe: Set the parent stream for SPOE streams
DOC: config: Add a dedicated section about variables
DOC: config: Add info about variable scopes referencing the parent stream
DOC: config: Explicitly state the SPOE streams have a usable parent stream
MINOR: spoe: Add a function to validate a version is supported
MINOR: spoe: export the list of SPOP error reasons
MEDIUM: spoe/tcpcheck: Reintroduce SPOP check as a customized tcp-check
REGTESTS: check/spoe: Re-enable the script performing SPOP health-checks
Frederic Lecaille (2):
BUG/MINOR: quic: Non optimal first datagram.
MINOR: quic: Avoid cc priv buffer overflow.
Lukas Tribus (1):
DOC: install: don't reference removed CPU arg
Valentine Krasnobaeva (20):
MINOR: limits: prepare to keep limits in one place
REORG: fd: move raise_rlim_nofile to limits
CLEANUP: fd: rm struct rlimit definition
REORG: global: move rlim_fd_*_at_boot in limits
MINOR: haproxy: prepare to move limits-related code
REORG: haproxy: move limits handlers to limits
MINOR: limits: add is_any_limit_configured
BUG/MINOR: limits: fix license type in limits.h
MINOR: debug: prepare feed_post_mortem_late
CLEANUP: debug: fix indents in debug_parse_cli_show_dev
MINOR: debug: store runtime uid/gid in postmortem
MINOR: debug: keep runtime capabilities in post_mortem
MINOR: debug: use LIM2A to show limits
MINOR: debug: prepare to show runtime limits
MINOR: debug: keep runtime limits in postmortem
BUG/MEDIUM: ssl_sock: fix deadlock in ssl_sock_load_ocsp() on error path
MEDIUM: ocsp: fix ocsp when the chain is loaded from 'issuers-chain-path'
BUG/MEDIUM: startup: fix zero-warning mode
MINOR: cfgparse-global: move mode's keywords in cfg_kw_list
MINOR: cfgparse-global: move no<poller_name> in cfg_kw_list
William Lallemand (5):
MEDIUM: ssl: add extra_chain to ckch_data
MINOR: ssl: change issuers-chain for show_cert_detail()
REGTESTS: ssl: test the issuers-chain-path keyword
DOC: configuration: issuers-chain-path not compatible with OCSP
DOC: configuration: issuers-chain-path is compatible with OCSP
Willy Tarreau (5):
BUILD: mux-spop: fix build failure on gcc 4-10 and clang
MINOR: fd: don't scan the full fdtab on all threads
BUG/MEDIUM: debug/cli: fix "show threads" crashing with low thread counts
BUG/MAJOR: mux-h2: force a hard error upon short read with pending error
DOC: config: improve the http-keep-alive section
---