Hi,
HAProxy 2.6-dev6 was released on 2022/04/16. It added 150 new commits
after version 2.6-dev5.
This release mostly focuses on integrating the second half of the merge
of the stream interface and conn_stream that I spoke about last week, and
it concludes this operation that was envisionned since the introduction of
the conn_stream in 1.8. While the change is very methodic, it touches many
places and there is a non-null risk that something was broken, hence the
reason for exposing this rework as soon as possible. There is no expected
change for users (aside a possible bug of course), but for developers it
will change the way to access the lower layers from the upper ones (it will
be simpler but for those like me who've used that since 1.4 or so, it will
take some time to get used to it).
QUIC saw a small batch of fixes and improvements (some are still pending).
One visible part is that the SSL sample fetch functions now work on QUIC
connections (e.g. ssl_fc or ssl_f_serial etc) and that the source address
is now properly retrieved. The destination address is still inaccurate,
the listener's address is retrieved (but if it's bound to an exact address
instead of 0.0.0.0, the correct one will be reported). The reason is the
limited API to retrieve the destination address of an incoming datagram.
We've found a possibility to explore soon on Linux.
A few TCP info sample fetch methods were enabled on MacOS.
A few long-pending issues were addressed, and these fixes will be backported
to affected versions, but there's nothing exceptional on this front.
After some discussion with William and Emeric around the build trouble made
by OpenSSL engines in OpenSSL 3.0 that dumps a torrent of warnings that hide
important ones, and the fact that users of engines usually build some or all
parts themselves, it was decided that engines are not enabled by default
anymore, but that they may be enabled by passing "USE_ENGINE=1" to make.
As such we now have the two following options:
- build with just USE_OPENSSL=1, engines are disabled, no warning should
be emitted. The SSL maintainers think it should be the default since
the future of engines in OpenSSL is uncertain due to the new "providers"
API that might possibly change certain settings in the future anyway.
- build with USE_OPENSSL=1 USE_ENGINE=1 to continue to enable engines.
In this case an extra option is passed to disable deprecation warnings
in OpenSSL so that the build should not emit any warning either, but
may also hide future deprecation warnings.
My personal suspicion is that distros will build without engines since
there is none that we're aware of that works out of the box without having
at least to touch openssl a little bit, and that advanced users will
continue to build their own optimized packages with this option enabled.
Time will tell, as usual.
Another improvement which is not related to the code, with the precious
help of Tim and Cyril, we could finally set up an automatic generation of
the HTML documentation. It's performed daily and published on github pages
at http://docs.haproxy.org.
William has also set up a build system that's triggered by the CI and that
produces packages of the latest development version for various distros.
The goal is to help users deploy development versions to participate to
the testing and benefit early from new features, as we know that till now
it used to require particular efforts and that not everyone has enough
time to think about rebuilding packages often. I'll let William expand on
this point regarding what's covered and how to use this.
Finally we've added links to remaining issues affecting the development
versions below (verified bugs, unqualified ones and automated code reports).
These are just shortcuts for filters in the issue tracker, but it's pleasant
to see that there are quite few left thus we're on a good trend.
LAST MINUTE:
------------
The deployment on haproxy.org crashed during the typing of this message.
I've pushed a fix that seems to have fixed it but I'll double-check with
Christopher next week if I'm fixing the bug of just hiding it. Please do
not deploy it in production before we send the signal that it's OK (we'll
emit a new version then).
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.git/
Git Web browsing : http://git.haproxy.org/?p=haproxy.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
Willy
---
Complete changelog :
Amaury Denoyelle (6):
BUG/MINOR: h3: fix build with DEBUG_H3
BUG/MINOR: mux-quic: prevent a crash in session_free on mux.destroy
BUG/MINOR: quic-sock: do not double free session on conn init failure
BUG/MINOR: quic: fix return value for error in start
MINOR: quic: emit CONNECTION_CLOSE on app init error
BUG/MEDIUM: quic: properly clean frames on stream free
Christopher Faulet (90):
BUG/MINOR: mux-h1: Don't release unallocated CS on error path
MINOR: applet: Make .init callback more generic
MINOR: conn-stream: Add flags to set the type of the endpoint
MEDIUM: applet: Set the appctx owner during allocation
MAJOR: conn-stream: Invert conn-stream endpoint and its context
REORG: Initialize the conn-stream by hand in cs_init()
MEDIUM: conn-stream: Add an endpoint structure in the conn-stream
MINOR: conn-stream: Move some CS flags to the endpoint
MEDIUM: conn-stream: Be able to pass endpoint to create a conn-stream
MEDIUM: conn-stream: Pre-allocate endpoint to create CS from muxes and
applets
REORG: applet: Uninline appctx_new function
MAJOR: conn-stream: Share endpoint struct between the CS and the
mux/applet
MEDIUM: conn-stream: Move remaning flags from CS to endpoint
MINOR: mux-pt: Rely on the endpoint instead of the conn-stream when
possible
MINOR: conn-stream: Add ISBACK conn-stream flag
MINOR: conn-stream: Add header file with util functions related to
conn-streams
MEDIUM: tree-wide: Use CS util functions instead of SI ones
MINOR: stream-int/txn: Move buffer for L7 retries in the HTTP transaction
CLEANUP: http-ana: Remove http_alloc_txn() function
MINOR: stream-int/stream: Move conn_retries counter in the stream
MINOR: stream: Simplify retries counter calculation
MEDIUM: stream-int/conn-stream: Move src/dst addresses in the conn-stream
MINOR: stream-int/conn-stream: Move half-close timeout in the conn-stream
MEDIUM: stream-int/stream: Use connect expiration instead of SI expiration
MINOR: stream-int/conn-stream: Report error to the CS instead of the SI
MEDIUM: conn-stream: Use endpoint error instead of conn-stream error
MINOR: channel: Use conn-streams as channel producer and consumer
MINOR: stream-int: Remove SI_FL_KILL_CON to rely on conn-stream endpoint
only
MINOR: mux-h2/mux-fcgi: Fully rely on CS_EP_KILL_CONN
MINOR: stream-int: Remove SI_FL_NOLINGER/NOHALF to rely on CS flags
instead
MINOR: stream-int: Remove SI_FL_DONT_WAKE to rely on CS flags instead
MINOR: stream-int: Remove SI_FL_INDEP_STR to rely on CS flags instead
MINOR: stream-int: Remove SI_FL_SRC_ADDR to rely on stream flags instead
CLEANUP: stream-int: Remove unused SI_FL_CLEAN_ABRT flag
MINOR: stream: Only save previous connection state for the server side
MEDIUM: stream-int: Move SI err_type in the stream
MEDIUM: stream-int/conn-stream: Move stream-interface state in the
conn-stream
MINOR: stream-int/stream: Move si_retnclose() in the stream scope
MINOR: stream-int/backend: Move si_connect() in the backend scope
MINOR: stream-int/conn-stream: Move si_conn_ready() in the conn-stream
scope
MINOR: conn-stream/connection: Move SHR/SHW modes in the connection scope
MEDIUM: conn-stream: Be prepared to fail to attach a cs to a mux
MEDIUM: stream-int/conn-stream: Handle I/O subscriptions in the
conn-stream
MINOR: conn-stream: Rename CS functions dedicated to connections
MINOR: stream-int/conn-stream: Move si_shut* and si_chk* in conn-stream
scope
MEDIUM: stream-int/conn-stream: Move si_ops in the conn-stream scope
MINOR: applet: Use the CS to register and release applets instead of SI
MINOR: connection: unconst mux's get_fist_cs() callback function
MINOR: stream-int/connection: Move conn_si_send_proxy() in the connection
scope
REORG: stream-int: Export si_cs_recv(), si_cs_send() and si_cs_process()
REORG: stream-int: Move si_is_conn_error() in the header file
REORG: conn-stream: Move cs_shut* and cs_chk* in cs_utils
REORG: conn-stream: Move cs_app_ops in conn_stream.c
MINOR: stream-int-conn-stream: Move si_update_* in conn-stream scope
MINOR: stream-int/stream: Move si_update_both in stream scope
MEDIUM: conn-stream/applet: Add a data callback for applets
MINOR: stream-int/conn-stream: Move stream_int_read0() in the conn-stream
scope
MINOR: stream-int/conn-stream: Move stream_int_notify() in the
conn-stream scope
MINOR: stream-int/conn-stream: Move si_cs_io_cb() in the conn-stream scope
MINOR: stream-int/conn-stream: Move si_sync_recv/send() in conn-stream
scope
MINOR: conn-stream: Move si_conn_cb in the conn-stream scope
MINOR: stream-int/conn-stream Move si_is_conn_error() in the conn-stream
scope
MINOR: stream-int/conn-stream: Move si_alloc_ibuf() in the conn-stream
scope
CLEANUP: stream-int: Remove unused SI functions
MEDIUM: stream-int/conn-stream: Move blocking flags from SI to CS
MEDIUM: stream-int/conn-stream: Move I/O functions to conn-stream
REORG: stream-int/conn-stream: Move remaining functions to conn-stream
MINOR: stream: Use conn-stream to report server error
MINOR: http-ana: Use CS to perform L7 retries
MEDIUM: stream: Don't use the stream-int anymore in process_stream()
MINOR: conn-stream: Remove the stream-interface from the conn-stream
DEV: flags: No longer dump SI flags
CLEANUP: tree-wide: Remove any ref to stream-interfaces
CLEANUP: conn-stream: Don't export internal functions
DOC: conn-stream: Add comments on functions of the new CS api
MEDIUM: check: Use a new conn-stream for each health-check run
CLEANUP: muxes: Remove MX_FL_CLEAN_ABRT flag
MINOR: conn-stream: Use a dedicated function to conditionally remove a CS
CLEANUP: conn-stream: rename cs_register_applet() to cs_applet_create()
MINOR: muxes: Improve show_fd callbacks to dump endpoint flags
MINOR: mux-h1: Rely on the endpoint instead of the conn-stream when
possible
MINOR: muxes: Don't expect to have a mux without connection in destroy
callback
MINOR: muxes: Don't handle proto upgrade for muxes not supporting it
MINOR: muxes: Don't expect to call release function with no mux defined
MINOR: conn-stream: Use unsafe functions to get conn/appctx in
cs_detach_endp
BUG/MEDIUM: mux-h1: Don't request more room on partial trailers
BUILD: http-client: Avoid dead code when compiled without SSL support
BUG/MEDIUM: connection: Don't crush context pointer location if it is a CS
BUG/MEDIUM: fcgi-app: Use http_msg flags to know if C-L header can be
added
BUG/MEDIUM: compression: Don't forget to update htx_sl and http_msg flags
David CARLIER (2):
MINOR: tcp_sample: clarifying samples support per os, for further
expansion.
MINOR: tcp_sample: extend support for get_tcp_info to macOs.
Frédéric Lécaille (1):
BUG/MINOR: quic: Avoid starting the mux if no ALPN sent by the client
Ilya Shipitsin (2):
DOC: adjust QUIC instruction in INSTALL
CI: cirrus: switch to FreeBSD-13.0
Tim Duesterhus (2):
CI: Update to actions/checkout@v3
CI: Update to actions/cache@v3
William Lallemand (2):
BUILD: ssl: add USE_ENGINE and disable the openssl engine by default
CI: github actions: disable -Wno-deprecated
Willy Tarreau (45):
CLEANUP: connection: reduce the with of the mux dump output
BUG/MINOR: stats: define the description' background color in dark color
scheme
BUILD: makefile: pass USE_ENGINE to cflags
BUILD: xprt-quic: replace ERR_func_error_string() with
ERR_peek_error_func()
DOC: install: document the fact that SSL engines are not enabled by
default
BUILD: makefile: silence unbearable OpenSSL deprecation warnings
MINOR: sock: check configured limits at the sock layer, not the listener's
MINOR: connection: add a new flag CO_FL_FDLESS on fd-less connections
MINOR: connection: add conn_fd() to retrieve the FD only when it exists
MINOR: stream: only dump connections' FDs when they are valid
MINOR: connection: use conn_fd() when displaying connection errors
MINOR: connection: skip FD-based syscalls for FD-less connections
MEDIUM: connection: panic when calling FD-specific functions on FD-less
conns
MINOR: mux-quic: properly set the flags and name fields
MINOR: connection: rearrange conn_get_src/dst to be a bit more extensible
MINOR: protocol: add get_src() and get_dst() at the protocol level
MINOR: quic-sock: provide a pair of get_src/get_dst functions
MEDIUM: ssl: improve retrieval of ssl_sock_ctx and SSL detection
MEDIUM: ssl: stop using conn->xprt_ctx to access the ssl_sock_ctx
MEDIUM: xprt-quic: implement get_ssl_sock_ctx()
MEDIUM: quic: move conn->qc into conn->handle
BUILD: ssl: fix build warning with previous changes to ssl_sock_ctx
BUILD: ssl: add an unchecked version of __conn_get_ssl_sock_ctx()
MINOR: ssl: refine the error testing for fc_err and fc_err_str
BUG/MINOR: sock: do not double-close the accepted socket on the error path
MINOR: log: add '~' to frontend when the transport layer provides SSL
BUILD/DEBUG: lru: fix printf format in debug code
BUILD: peers: adjust some printf format to silence cppcheck
BUILD/DEBUG: hpack-tbl: fix format string in standalone debug code
BUILD/DEBUG: hpack: use unsigned int in printf format in debug code
BUILD: halog: fix some incorrect signs in printf formats for integers
BUG/MINOR: mux-h2: do not send GOAWAY if SETTINGS were not sent
BUG/MINOR: cache: do not display expired entries in "show cache"
BUILD: debug: mark the __start_mem_stats/__stop_mem_stats symbols as weak
BUILD: initcall: mark the __start_i_* symbols as weak, not global
BUG/MINOR: mux-h2: do not use timeout http-keep-alive on backend side
BUG/MINOR: mux-h2: use timeout http-request as a fallback for
http-keep-alive
BUILD: sched: workaround crazy and dangerous warning in Clang 14
BUILD: compiler: use a more portable set of asm(".weak") statements
BUG/MEDIUM: stream: do not abort connection setup too early
CLEANUP: extcheck: do not needlessly preset the server's address/port
MINOR: extcheck: fill in the server's UNIX socket address when known
SCRIPTS: announce-release: update the doc's URL
DOC: lua: update a few doc URLs
SCRIPTS: announce-release: add shortened links to pending issues
---