Hi,
HAProxy 2.5-dev10 was released on 2021/10/16. It added 75 new commits
after version 2.5-dev9.
The smoke is progressively being blown away and we're starting to see
clearer what final 2.5 will look like.
In completely random order, here are the main changes I noticed in this
release:
- some fixes for OpenSSL 3.0.0 support from Rémi and William; regression
tests were fixed as well and the version in the CI was upgraded from
alpha17 to 3.0.0
- Rémi's JWT patches were merged. Now it becomes possible to decode
JWT tokens and check their integrity. There are still a few pending
patches for it but they're essentially cosmetic, so the code is
expected to be already operational. Those who've been waiting for
this are strongly invited to give it a try so that any required
change has a chance to be merged before 2.5. Alex ?
- Christopher merged his series that allows to place tcp-request and
http-request rules in named "defaults" sections and have them
processed first by frontends and backends that explicitly depend on
them. This finally allows to merge infrastructure rules in defaults
sections while keeping section-specific rules in frontend/backend
sections. The long-term goal is to ease the creation of fully
functional backends on the fly in the future. It was much trickier than
initially imagined due to arguemnts of sample fetches and converters
that are context-dependent (e.g. current proxy name). All envisioned
corner cases were addressed but that doesn't mean that it's 100%
problem-free yet. However I asked Christopher to merge it now to help
collect more feedback on configs that are not trivial to think about.
So if your config repeats many identical tcp/http rules in their
frontends or backends, you may be interested in giving this a try,
and we're interested in knowing if you faced any error that makes it
impossible for you to express a config that you'd consider simple.
- the first part of Björn's MPTCP patches was merged. This part deals
with the formatting of socket errors and warnings so that the whole
list of warnings can be reported instead of only the last one.
- I merged the patches adding the "shards" option to the "bind" lines. It
replicates the listeners the specified number of times and distributes
them among the number of threads. This can be useful on workloads
involving a high connection rate on large thread numbers, when the
kernel-side CPU load becomes high due to the close() syscall locking
the pollers. By spreading the activity over multiple sockets, this
contention reduces a lot. This will later be reused with the thread
groups when trying to bind some listeners on more than 64 threads.
- improved error reporting (e.g. bind errors about MSS/interfaces), and
troubleshooting (file, line number and names for active filters and
rules in "show sess all").
- William added a new config predicate "ssllib_name_startswith" to
detect the type of SSL library in "-cc" rules.
- some doc rearragement for long lists of rules
- another batch of H3/QUIC cleanups and fixes
- new regression tests were written (I'm seeing 162 being executed right now).
- usual small batch of bug fixes
There are still a number of things I've collected during this week:
- some config predicates are not documented (openssl_version_atleast,
openssl_version_before, ssllib_name_startswith)
- a number of cleanup patches were posted on the list but not reviewed
yet (at first glance they all look right)
- there are at least two issues left on the resolvers code that affect
2.4 as well. One of them is a random crash that I could only verify
that it depends on a use-after-free that I couldn't spot yet. I'm
getting closer but not there yet :-( The other one is a remaining
code path with extreme complexity that runs under a global lock and
manages to trigger the watchdog when used with many threads and many
servers. Some improvements were made, and we have some ideas about
how to go much farther (replacing the last-level list with a tree,
and splitting the single lock in two to still allow some parallelism).
- some TLS issues were reported at least since 2.4, causing more
renegotiations than needed because the session cache is not always
updated. Emeric and William started to find some problems when trying
to reproduce but further investigation is still ongoing.
- there are still many issues on github and I'd like that we prioritize
them over code. Most of them affect versions before 2.4 so they are
not last-minute regressions, but until we have an idea how they'll
have to be fixed, it's still not too late to make significant changes
if that helps releasing 2.5 in a cleaner state.
Please find the usual URLs below :
Site index : http://www.haproxy.org/
Discourse : http://discourse.haproxy.org/
Slack channel : https://slack.haproxy.org/
Issue tracker : https://github.com/haproxy/haproxy/issues
Wiki : https://github.com/haproxy/wiki/wiki
Sources : http://www.haproxy.org/download/2.5/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.5/src/CHANGELOG
Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/
Willy
---
Complete changelog :
Amaury Denoyelle (9):
MEDIUM: mux-quic: rationalize tx buffers between qcc/qcs
MEDIUM: h3: properly manage tx buffers for large data
MINOR: mux-quic: standardize h3 settings sending
CLEANUP: h3: remove dead code
MINOR: mux-quic: implement standard method to detect if qcc is dead
MEDIUM: mux-quic: defer stream shut if remaining tx data
MINOR: mux: remove last occurences of qcc ring buffer
MINOR: quic: handle CONNECTION_CLOSE frame
BUG/MEDIUM: cpuset: fix cpuset size for FreeBSD
Bjoern Jacke (1):
MINOR: proto_tcp: use chunk_appendf() to ouput socket setup errors
Christopher Faulet (22):
MINOR: stream: report the current filter in "show sess all" when known
CLEANUP: stream: Properly indent current_rule line in "show sess all"
BUG/MINOR: http-ana: Don't eval front after-response rules if stopped on
back
BUG/MINOR: sample: Fix 'fix_tag_value' sample when waiting for more data
DOC: config: Move 'tcp-response content' at the right place
BUG/MINOR: proxy: Use .disabled field as a bitfield as documented
MINOR: proxy: Introduce proxy flags to replace disabled bitfield
MINOR: sample/arg: Be able to resolve args found in defaults sections
MEDIUM: proxy: Warn about ambiguous use of named defaults sections
MINOR: proxy: Be able to reference the defaults section used by a proxy
MINOR: proxy: Add PR_FL_READY flag on fully configured and usable proxies
MINOR: config: Finish configuration for referenced default proxies
MINOR: config: No longer remove previous anonymous defaults section
MINOR: tcpcheck: Support 2-steps args resolution in defaults sections
MEDIUM: rules/acl: Parse TCP/HTTP rules and acls defined in defaults
sections
MEDIUM: tcp-rules: Eval TCP rules defined in defaults sections
MEDIUM: http-ana: Eval HTTP rules defined in defaults sections
BUG/MEDIUM: sample: Cumulate frontend and backend sample validity flags
REGTESTS: Add scripts to test support of TCP/HTTP rules in defaults
sections
DOC: config: Add documentation about TCP/HTTP rules in defaults section
DOC: config: Rework and uniformize how TCP/HTTP rules are documented
BUG/MINOR: proxy: Release ACLs and TCP/HTTP rules of default proxies
Olivier Houchard (1):
MINOR: initcall: Rename __GLOBL and __GLOBL1.
Remi Tricot-Le Breton (12):
REGTESTS: ssl: Fix references to removed option in test description
MINOR: ssl: Add ssllib_name_startswith precondition
REGTESTS: ssl: Fix ssl_errors test for OpenSSL v3
REGTESTS: ssl: Reenable ssl_errors test for OpenSSL only
REGTESTS: ssl: Use mostly TLSv1.2 in ssl_errors test
MINOR: http: Add http_auth_bearer sample fetch
MINOR: jwt: Parse JWT alg field
MINOR: jwt: JWT tokenizing helper function
MINOR: jwt: Insert public certificates into dedicated JWT tree
MINOR: jwt: jwt_header_query and jwt_payload_query converters
MEDIUM: jwt: Add jwt_verify converter to verify JWT integrity
REGTESTS: jwt: Add tests for the jwt_verify converter
Tim Duesterhus (1):
BUG/MINOR: lua: Fix lua error handling in `hlua_config_prepend_path()`
William Lallemand (4):
CI: github: switch to OpenSSL 3.0.0
REGTESTS: ssl: re-enable set_ssl_cert_bundle.vtc
MINOR: ssl: add ssl_fc_is_resumed to "option httpslog"
BUILD: jwt: fix declaration of EVP_KEY in jwt-h.h
Willy Tarreau (25):
MINOR: rules: add a new function new_act_rule() to allocate act_rules
MINOR: rules: add a file name and line number to act_rules
MINOR: stream: report the current rule in "show sess all" when known
MINOR: proto_tcp: also report the attempted MSS values in error message
MINOR: inet: report the faulty interface name in "bind" errors
MINOR: protocol: report the file and line number for binding/listening
errors
MINOR: protocol: uniformize protocol errors
MINOR: resolvers: fix the resolv_str_to_dn_label() API about trailing zero
BUG/MEDIUM: resolver: make sure to always use the correct hostname length
BUG/MINOR: resolvers: do not reject host names of length 255 in SRV
records
MINOR: resolvers: fix the resolv_dn_label_to_str() API about trailing zero
MEDIUM: listeners: split the thread mask between receiver and bind_conf
MINOR: listeners: add clone_listener() to duplicate listeners at boot time
MEDIUM: listener: add the "shards" bind keyword
BUG/MEDIUM: resolvers: use correct storage for the target address
MINOR: resolvers: merge address and target into a union "data"
BUG/MEDIUM: resolvers: fix truncated TLD consecutive to the API fix
BUG/MEDIUM: jwt: fix base64 decoding error detection
BUG/MINOR: jwt: use CRYPTO_memcmp() to compare HMACs
DOC: jwt: fix a typo in the jwt_verify() keyword description
BUG/MEDIUM: sample/jwt: fix another instance of base64 error detection
BUG/MINOR: sample: fix backend direction flags consecutive to last fix
BUG/MINOR: listener: fix incorrect return on out-of-memory
BUG/MINOR: listener: add an error check for unallocatable trash
CLEANUP: listeners: remove unreachable code in clone_listener()
---