Hi,
HAProxy 2.7-dev6 was released on 2022/09/17. It added 108 new commits
after version 2.7-dev5.
This cycle was mostly focused on debugging improvements to help developers
extract information from bug reports:
- the "show sess all" output will now dump the mux states;
- task profiling will now report call statistics per calling place
- the "flags" utility can now decode 8 new fields among which HTX
states and different mux flags
- more QUIC traces
In addition to this, a new anonymizing mechanism was added to help bug
reporters share outputs and configs. When anonymized mode is enabled on
the CLI, some commands such as "show sess", "show servers" etc will have
a number of fields replaced with a small hash (24 bits). This includes
identifiers (e.g. proxy/server names), IP addresses and host names. These
are the fields that most users waste time redacting in these outputs when
asked for extra info. For the config file, a new "-dC" command-line option
dumps the config file after tokenizing. With a key in argument it also
hashes arguments of a number of commands in a way that allows to easily
match them against the dumps, and will drop arguments past the 3rd one,
since it looks like most of the time we need options and basic definitions.
All of this is still in its early stage and is expected to evolve. For
example I'd like "server" and "bind" lines to appear complete, only
without addresses and names. We'll see along forthcoming reports how
well this works and what needs to be improved but the hope is that it
will already lower the effort on the reporter's side and reduce the
number of round-trips required to figure a problem's cause.
Aside debugging, the HTTP client was improved to support creating specific
proxies when non-standard options are needed.
Another great news is that support was added for the very latest LibreSSL
(still in development), which joined the large band of alternate stacks
who adopted the de-facto standard QUIC interface that OpenSSL remains the
only one to refuse to integrate. The good news here is that till now only
QuicTLS was usable for us, but that's a voluntary effort and nobody knows
how long its maintainers will be willing to maintain it, and it's still
not packaged in distros. LibreSSL is maintained, mostly compatible with
OpenSSL and was/is shipped with certain OS and distros. So until OpenSSL
changes their mind and finally accepts to listen to their users, this
could constitute an acceptable mid-term solution to enable QUIC with some
maintained library. We'll see how all this evolves.
And as usual, a bunch of bugs were fixed (but not that many this time).
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/2.7/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/2.7/src/CHANGELOG
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 (4):
BUG/MEDIUM: mux-quic: fix crash on early app-ops release
CLEANUP: mux-quic: remove stconn usage in h3/hq
BUG/MINOR: mux-quic: do not remotely close stream too early
CLEANUP: exclude udp-perturb with .gitignore
Aurelien DARRAGON (7):
BUG/MEDIUM: proxy: ensure pause_proxy() and resume_proxy() own PROXY_LOCK
MINOR: listener: small API change
MINOR: proxy/listener: support for additional PAUSED state
BUG/MINOR: stats: fixing stat shows disabled frontend status as 'OPEN'
CLEANUP: listener: function comment typo in stop_listener()
BUG/MINOR: listener: null pointer dereference suspected by coverity
BUG/MEDIUM: server: segv when adding server with hostname from CLI
Brad Smith (2):
MINOR: Revert part of clarifying samples support per os commit
BUILD: makefile: enable crypt(3) for NetBSD
Christopher Faulet (6):
MINOR: http-check: Remove support for headers/body in "option httpchk"
version
BUG/MINOR: h1: Support headers case adjustment for TCP proxies
BUG/MINOR: mux-h1: Increment open_streams counter when H1 stream is
created
REGTESTS: healthcheckmail: Relax matching on the healthcheck log message
REORG: mux-h1: extract flags and enums into mux_h1-t.h
MINOR: flags/mux-h1: decode H1C and H1S flags
Emeric Brun (1):
BUG/MEDIUM: sink: bad init sequence on tcp sink from a ring.
Erwan Le Goas (6):
MINOR: anon: add new macros and functions to anonymize contents
MINOR: anon: store the anonymizing key in the global structure
MINOR: anon: store the anonymizing key in the CLI's appctx
MINOR: cli: anonymize commands 'show sess' and 'show sess all'
MINOR: cli: anonymize 'show servers state' and 'show servers conn'
MINOR: config: add command-line -dC to dump the configuration file
Frédéric Lécaille (14):
BUG/MINOR: quic: Retransmitted frames marked as acknowledged
BUG/MINOR: quic: Possible crash with "tls-ticket-keys" on QUIC bind lines
BUG/MINOR: quic: Possible crash when verifying certificates
MINOR: quic: Add traces about sent or resent TX frames
MINOR: quic: No TRACE_LEAVE() in retrieve_qc_conn_from_cid()
BUG/MINOR: quic: Wrong connection ID to thread ID association
BUG/MINOR: quic: Speed up the handshake completion only one time
BUG/MINOR: quic: Trace fix about packet number space information.
BUG/MINOR: h3: Crash when h3 trace verbosity is "minimal"
MINOR: h3: Add the quic_conn object to h3 traces
MINOR: h3: Missing connection argument for a TRACE_LEAVE() argument
MINOR: h3: Send the h3 settings with others streams (requests)
MINOR: dev/udp: Apply the corruption to both directions
BUILD: udp-perturb: Add a make target for udp-perturb tool
Ilya Shipitsin (1):
CI: cirrus-ci: bump FreeBSD image to 13-1
Mathias Weiersmueller (1):
DOC: fix TOC in starter guide for subsection 3.3.8. Statistics
Matthias Wirth (1):
BUG/MINOR: signals/poller: ensure wakeup from signals
William Lallemand (14):
BUILD: quic: add some ifdef around the SSL_ERROR_* for libressl
BUILD: ssl: fix ssl_sock_switchtx_cbk when no client_hello_cb
BUILD: quic: temporarly ignore chacha20_poly1305 for libressl
BUILD: quic: enable early data only with >= openssl 1.1.1
BUILD: ssl: fix the ifdef mess in ssl_sock_initial_ctx
BUILD: quic: fix the #ifdef in ssl_quic_initial_ctx()
MINOR: quic: add QUIC support when no client_hello_cb
BUG/MINOR: signals/poller: set the poller timeout to 0 when there are
signals
REGTESTS: log: test the log-forward feature
REGTESTS: ssl/log: test the log-forward with SSL
MEDIUM: httpclient: httpclient_create_proxy() creates a proxy for
httpclient
MEDIUM: httpclient: allow to use another proxy
MINOR: httpclient: export httpclient_create_proxy()
MEDIUM: quic: separate path for rx and tx with set_encryption_secrets
Willy Tarreau (50):
BUG/MINOR: task: always reset a new tasklet's call date
BUG/MINOR: task: make task_instant_wakeup() work on a task not a tasklet
MINOR: task: permanently enable latency measurement on tasklets
CLEANUP: task: rename ->call_date to ->wake_date
BUG/MINOR: sched: properly account for the CPU time of dying tasks
MINOR: sched: store the current profile entry in the thread context
BUG/MINOR: stream/sched: take into account CPU profiling for the last call
MINOR: tasks: do not keep cpu and latency times in struct task
MINOR: tools: add generic pointer hashing functions
CLEANUP: activity: make memprof use the generic ptr_hash() function
CLEANUP: activity: make taskprof use ptr_hash()
MINOR: debug: add struct ha_caller to describe a calling location
CLEANUP: debug: use struct ha_caller for memstat
DEBUG: task: define a series of wakeup types for tasks and tasklets
DEBUG: task: use struct ha_caller instead of arrays of file:line
DEBUG: applet: instrument appctx_wakeup() to log the caller's location
DEBUG: task: simplify the caller recording in DEBUG_TASK
CLEANUP: task: move tid and wake_date into the common part
CLEANUP: sched: remove duplicate code in run_tasks_from_list()
CLEANUP: activity: make the number of sched activity entries more
configurable
DEBUG: resolvers: unstatify process_resolvers() to make it appear in
profiling
DEBUG: quic: export the few task handlers that often appear in task dumps
MEDIUM: tasks/activity: combine the called function with the caller
MINOR: tasks/activity: improve the caller-callee activity hash
MINOR: activity/cli: support aggregating task profiling outputs
MINOR: activity/cli: support sorting task profiling by total CPU time
DEV: flags: fix usage message to reflect available options
DEV: flags: add missing CO_FL_FDLESS connection flag
MINOR: flags: add a new file to host flag dumping macros
MINOR: flags: implement a macro used to dump enums inside masks
MINOR: flags/channel: use flag dumping for channel flags and analysers
MINOR: flags/connection: use flag dumping for connection flags
MINOR: flags/stconn: use flag dumping for stconn and sedesc flags
MINOR: flags/stream: use flag dumping for stream error type
MINOR: flags/stream: use flag dumping for stream flags
MINOR: flags/task: use flag dumping for task state
MINOR: flags/http_ana: use flag dumping for txn flags
DEV: flags: remove the now unused SHOW_FLAG() definition
DEV: flags: remove the now useless intermediary functions
MINOR: flags/htx: use flag dumping to show htx and start-line flags
MINOR: flags/http_ana: use flag dumping to show http msg states
BUILD: flags: fix build warning in some macros used by show_flags
BUILD: flags: fix the fallback macros for missing stdio
CLEANUP: pollers: remove dead code in the polling loop
MINOR: flags/fd: decode FD flags states
REORG: mux-h2: extract flags and enums into mux_h2-t.h
MINOR: flags/mux-h2: decode H2C and H2S flags
BUG/MEDIUM: captures: free() an error capture out of the proxy lock
BUILD: fd: fix a build warning on the DWCAS
SCRIPTS: announce-release: update some URLs to https
cui fliter (1):
CLEANUP: quic,ssl: fix tiny typos in C comments
---