Hi,
HAProxy 2.6-dev2 was released on 2022/02/25. It added 212 new commits
after version 2.6-dev1.
First, there was the usual bag of bug fixes for such a dev release
(~35), as well as a few build fixes. As usual there are ~50 updates to
QUIC; certain small but annoying internal architecture limitations are
currently being addressed, so I wouldn't be surprised to see a steady
flow of patches in that area in the next releases.
The main focus for this version is:
- end of the migration to OpenSSL 3.0's native API, except for the
engines, which will continue to work with the old API for now, and
will need to be architected differently for the new one (probably
long and tedious work, not even sure if any engine adopted that yet).
- first pass of conn_stream rework. The addition of the muxes in 1.8
forced us to insert new layers in order not to break existing stuff
but these ones need to be progressively remerged with other adjacent
layers to reduce the risks of bugs bugs, improve performance and
maintainability. The goal is to pass through less layers between muxes
and streams so that we can get back to a more linear architecture like
we had in 1.6 with more direct communications between layers. Easier
said than done, but at least that first series now looked stable
enough to be merged instead of being continually rebased. More work
is expected there in the forthcoming weeks, so that we have a solid
base that will help backport fixes from 2.7-dev to 2.6 later without
taking risks.
- the master CLI now supports a debug mode via "mcli-debug-mode on"
that allows all regular CLI commands to be visible and accessible
for the master process, in order to debug it (e.g. see connections
to workers etc). Expert-mode is also available and a set of flags
indicating the current mode are now displayed in the prompt.
- httpclient updates, to support forcing a destination and setting a
transfer timeout.
- improved debugging of the memory pools: now instead of fiddling with
build-time options to enable/disable certain debugging features, it
becomes possible to enable/disable them from the command line by
passing some memory debugging keywords after "-dM". The build-time
options still exist and only fix the default settings.
- small improvements to the BUG_ON() macro and its cousins. More are
expected to come soon so that we can start to stuff them at plenty of
other places in the code and allow the level of validation to be
adjusted at build time, and more importantly that the reasonable
checks remain active by default.
- basic pool debugging and first-level BUG_ON() are now enabled by
default in the makefile.
- the CI now runs with full debugging turned on, and Coverity now also
covers QUIC
- a few new regtests, mainly for SSL stuff.
I sincerely hope that the long series of painful bugs that kept us away
from coding is far behind and that we'll soon be able to add more entries
above. Stable branches 2.3 and older should see a release next week I
think.
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.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
Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/
Willy
---
Complete changelog :
Amaury Denoyelle (30):
MINOR: h3: hardcode the stream id of control stream
MINOR: mux-quic: remove quic_transport_params_update
MINOR: quic: rename local tid variable
MINOR: quic: remove unused xprt rcv_buf operation
MINOR: quic: take out xprt snd_buf operation
MINOR: quic: use a global dghlrs for each thread
BUG/MEDIUM: quic: fix crash on CC if mux not present
MINOR: qpack: fix typo in trace
BUG/MINOR: quic: fix FIN stream signaling
BUG/MINOR: h3: fix the header length for QPACK decoding
MINOR: h3: remove transfer-encoding header
MINOR: h3: add documentation on h3_decode_qcs
MINOR: h3: set properly HTX EOM/BODYLESS on HEADERS parsing
MINOR: mux-quic: implement rcv_buf
MINOR: mux-quic: set EOS on rcv_buf
MINOR: h3: set CS_FL_NOT_FIRST
MINOR: h3: report frames bigger than rx buffer
MINOR: h3: extract HEADERS parsing in a dedicated function
MINOR: h3: implement DATA parsing
MINOR: h3: report error on HEADERS/DATA parsing
MINOR: h3: remove unused return value on decode_qcs
MINOR: mux-quic: fix a possible null dereference in qc_timeout_task
MINOR: quic: do not modify offset node if quic_rx_strm_frm in tree
MINOR: h3: fix compiler warning variable set but not used
MINOR: mux-quic: fix uninitialized return on qc_send
MINOR: quic: fix handling of out-of-order received STREAM frames
BUG/MEDIUM: quic: fix received ACK stream calculation
MINOR: quic: adjust buffer handling for STREAM transmission
MINOR: quic: liberate the TX stream buffer after ACK processing
MINOR: quic: add a TODO for a memleak frame on ACK consume
Andrew McDermott (1):
BUG/MAJOR: http/htx: prevent unbounded loop in
http_manage_server_side_cookies
Christian Ruppert (1):
DOC: Fix usage/examples of deprecated ACLs
Christopher Faulet (53):
BUG/MINOR: httpclient: Revisit HC request and response buffers allocation
BUG/MEDIUM: httpclient: Xfer the request when the stream is created
MINOR: httpclient: Don't limit data transfer to 1024 bytes
BUG/MEDIUM: htx: Be sure to have a buffer to perform a raw copy of a
message
BUG/MEDIUM: mux-h1: Don't wake h1s if mux is blocked on lack of output
buffer
BUG/MAJOR: mux-h2: Be sure to always report HTX parsing error to the app
layer
DEBUG: stream-int: Check CS_FL_WANT_ROOM is not set with an empty input
buffer
BUG/MEDIUM: stream: Abort processing if response buffer allocation fails
MINOR: stream-int: Handle appctx case first when releasing the endpoint
MINOR: connection: Be prepared to handle conn-stream with no connection
MINOR: stream: Handle appctx case first when creating a new stream
MINOR: connection: Add a function to detach a conn-stream from the
connection
MINOR: stream-int: Add function to reset a SI endpoint
MINOR: stream-int: Add function to attach a connection to a SI
MINOR: stream-int: Be able to allocate a CS without connection
MEDIUM: stream: No longer release backend conn-stream on connection retry
MEDIUM: stream: Allocate backend CS when the stream is created
REORG: conn_stream: move conn-stream stuff in dedicated files
MEDIUM: conn-stream: No longer access connection field directly
MEDIUM: conn-stream: Be prepared to use an appctx as conn-stream endpoint
MAJOR: conn_stream/stream-int: move the appctx to the conn-stream
MEDIUM: applet: Set the conn-stream as appctx owner instead of the
stream-int
MEDIUM: conn_stream: Add a pointer to the app object into the conn-stream
MINOR: stream: Add pointer to front/back conn-streams into stream struct
MINOR: stream: Slightly rework stream_new to separate CS/SI initialization
MINOR: stream-int: Always access the stream-int via the conn-stream
MINOR: backend: Always access the stream-int via the conn-stream
MINOR: stream: Always access the stream-int via the conn-stream
MINOR: http-ana: Always access the stream-int via the conn-stream
MINOR: cli: Always access the stream-int via the conn-stream
MINOR: log: Always access the stream-int via the conn-stream
MINOR: frontend: Always access the stream-int via the conn-stream
MINOR: proxy: Always access the stream-int via the conn-stream
MINOR: peers: Always access the stream-int via the conn-stream
MINOR: debug: Always access the stream-int via the conn-stream
MINOR: hlua: Always access the stream-int via the conn-stream
MINOR: cache: Always access the stream-int via the conn-stream
MINOR: dns: Always access the stream-int via the conn-stream
MINOR: http-act: Always access the stream-int via the conn-stream
MINOR: httpclient: Always access the stream-int via the conn-stream
MINOR: tcp-act: Always access the stream-int via the conn-stream
MINOR: sink: Always access the stream-int via the conn-stream
MINOR: conn-stream: Rename cs_detach() to cs_detach_endp()
CLEANUP: conn-stream: Don't export conn-stream pool
MAJOR: stream/conn_stream: Move the stream-interface into the conn-stream
CLEANUP: stream-int: rename si_reset() to si_init()
MINOR: conn-stream: Release a CS when both app and endp are detached
MINOR: stream: Don't destroy conn-streams but detach app and endp
MAJOR: check: Use a persistent conn-stream for health-checks
CLEANUP: conn-stream: Remove cs_destroy()
CLEANUP: backend: Don't export connect_server anymore
BUG/MINOR: h3/hq_interop: Fix CS and stream creation
BUILD: tree-wide: Avoid warnings about undefined entities retrieved from
a CS
Frédéric Lécaille (23):
MINOR: quic: Do not modify a marked as consumed datagram
MINOR: quic: Wrong datagram buffer passed to quic_lstnr_dgram_dispatch()
MINOR: quic: Remove a useless test in quic_get_dgram_dcid()
MINOR: quic: Remove an RX buffer useless lock
MINOR: quic: Variable used before being checked in
ha_quic_add_handshake_data()
MINOR: quic: EINTR error ignored
MINOR: quic: Potential overflow expression in qc_parse_frm()
MINOR: quic: Possible overflow in qpack_get_varint()
CLEANUP: h3: Unreachable target in h3_uqs_init()
MINOR: quic: Possible memleak in qc_new_conn()
MINOR: quic: Useless statement in quic_crypto_data_cpy()
MINOR: quic: Wrong smoothed rtt initialization
MINOR: quic: Wrong loss delay computation
MINOR: quic: Code never reached in qc_ssl_sess_init()
MINOR: quic: ha_quic_set_encryption_secrets without server specific code
MINOR: quic: Avoid warning about NULL pointer dereferences
MINOR: quic: Useless test in quic_lstnr_dghdlr()
MINOR: quic: Non checked returned value for cs_new() in
hq_interop_decode_qcs()
MINOR: h3: Dead code in h3_uqs_init()
MINOR: quic: Non checked returned value for cs_new() in h3_decode_qcs()
MINOR: quic: Possible frame parsers array overrun
MINOR: quic: Do not retransmit too much packets.
MINOR: quic: Move quic_rxbuf_pool pool out of xprt part
Ilya Shipitsin (3):
BUILD: ssl: adjust guard for X509_get_X509_PUBKEY(x)
REGTESTS: ssl: skip show_ssl_ocspresponse.vtc when BoringSSL is used
CI: enable QUIC for Coverity scan
Lukas Tribus (1):
BUG/MINOR: mailers: negotiate SMTP, not ESMTP
Remi Tricot-Le Breton (28):
BUG/MINOR: ssl: Remove empty lines from "show ssl ocsp-response <id>"
output
CLEANUP: ssl: Remove unused ssl_sock_create_cert function
MINOR: ssl: Use high level OpenSSL APIs in sha2 converter
MINOR: ssl: Remove EC_KEY related calls when preparing SSL context
REGTESTS: ssl: Add test for "curves" and "ecdhe" SSL options
MINOR: ssl: Remove EC_KEY related calls when creating a certificate
REGTESTS: ssl: Add test for "generate-certificates" SSL option
MINOR: ssl: Remove call to SSL_CTX_set_tlsext_ticket_key_cb with OpenSSLv3
MINOR: ssl: Remove call to HMAC_Init_ex with OpenSSLv3
MINOR: ssl: Remove call to ERR_func_error_string with OpenSSLv3
MINOR: ssl: Remove call to ERR_load_SSL_strings with OpenSSLv3
REGTESTS: ssl: Add tests for DH related options
MINOR: ssl: Create HASSL_DH wrapper structure
MINOR: ssl: Add ssl_sock_get_dh_from_bio helper function
MINOR: ssl: Factorize ssl_get_tmp_dh and append a cbk to its name
MINOR: ssl: Add ssl_sock_set_tmp_dh helper function
MINOR: ssl: Add ssl_sock_set_tmp_dh_from_pkey helper function
MINOR: ssl: Add ssl_new_dh_fromdata helper function
MINOR: ssl: Build local DH of right size when needed
MINOR: ssl: Set default dh size to 2048
MEDIUM: ssl: Replace all DH objects by EVP_PKEY on OpenSSLv3 (via
HASSL_DH type)
MINOR: ssl: Remove calls to SSL_CTX_set_tmp_dh_callback on OpenSSLv3
BUG/MINOR: jwt: Double free in deinit function
BUG/MINOR: jwt: Missing pkey free during cleanup
BUG/MINOR: jwt: Memory leak if same key is used in multiple jwt_verify
calls
BUG/MINOR: ssl: Add missing return value check in ssl_ocsp_response_print
BUG/MINOR: ssl: Fix leak in "show ssl ocsp-response" CLI command
BUG/MINOR: ssl: Missing return value check in ssl_ocsp_response_print
William Lallemand (15):
DOC: management: rework the Master CLI section
DOC: management: add expert and experimental mode in 9.4.1
CLEANUP: cleanup a commentary in pcli_parse_request()
BUG/MINOR: mworker/cli: don't display help on master applet
MINOR: mworker/cli: mcli-debug-mode enables every command
MINOR: mworker/cli: add flags in the prompt
BUG/MINOR: mworker: does not erase the pidfile upon reload
BUG/MINOR: httpclient/cli: display junk characters in vsn
BUG/MINOR: httpclient: reinit flags in httpclient_start()
MINOR: httpclient: sets an alternative destination
MINOR: httpclient/lua: add 'dst' optionnal field
BUG/MINOR: tools: url2sa reads ipv4 too far
MINOR: httpclient/lua: ability to set a server timeout
BUG/MINOR: httpclient/lua: missing pop for new timeout parameter
DOC: httpclient/lua: fix the type of the dst parameter
Willy Tarreau (57):
BUG/MEDIUM: pools: ensure items are always large enough for the
pool_cache_item
BUG/MINOR: pools: always flush pools about to be destroyed
CLEANUP: pools: don't needlessly set a call mark during refilling of
caches
DEBUG: pools: add extra sanity checks when picking objects from a local
cache
DEBUG: pools: let's add reverse mapping from cache heads to thread and
pool
DEBUG: pools: replace the link pointer with the caller's address on
pool_free()
BUG/MAJOR: sched: prevent rare concurrent wakeup of multi-threaded tasks
BUG/MAJOR: spoe: properly detach all agents when releasing the applet
REGTESTS: server: close an occasional race on dynamic_server_ssl.vtc
REGTESTS: peers: leave a bit more time to peers to synchronize
BUG/MEDIUM: h2/hpack: fix emission of HPACK DTSU after settings change
BUG/MINOR: mux-h2: update the session's idle delay before creating the
stream
CLEANUP: httpclient/cli: fix indentation alignment of the help message
BUG/MEDIUM: httpclient: limit transfers to the maximum available room
DEBUG: buffer: check in __b_put_blk() whether the buffer room is respected
MINOR: pools: mark most static pool configuration variables as read-mostly
CLEANUP: pools: remove the now unused pool_is_crowded()
REGTESTS: fix the race conditions in 40be_2srv_odd_health_checks
CLEANUP: httpclient: initialize the client in stage INIT not REGISTER
CLEANUP: muxes: do not use a dynamic trash in list_mux_protos()
CLEANUP: vars: move the per-process variables initialization to vars.c
CLEANUP: init: remove the ifdef on HAPROXY_MEMMAX
MINOR: pools: disable redundant poisonning on pool_free()
MINOR: pools: introduce a new pool_debugging global variable
MINOR: pools: switch the fail-alloc test to runtime only
MINOR: pools: switch DEBUG_DONT_SHARE_POOLS to runtime
MINOR: pools: add a new debugging flag POOL_DBG_COLD_FIRST
MINOR: pools: add a new debugging flag POOL_DBG_INTEGRITY
MINOR: pools: make the global pools a runtime option.
MEDIUM: pools: replace CONFIG_HAP_POOLS with a runtime "NO_CACHE" flag.
MINOR: pools: store the allocated size for each pool
MINOR: pools: get rid of POOL_EXTRA
MINOR: pools: replace DEBUG_POOL_TRACING with runtime POOL_DBG_CALLER
MINOR: pools: replace DEBUG_MEMORY_POOLS with runtime POOL_DBG_TAG
MINOR: pools: add a debugging flag for memory poisonning option
MEDIUM: initcall: move STG_REGISTER earlier
MEDIUM: init: split the early initialization in its own function
MINOR: init: extract args parsing to their own function
MEDIUM: init: handle arguments earlier
MINOR: pools: delegate parsing of command line option -dM to a new
function
MINOR: pools: support setting debugging options using -dM
BUILD: makefile: enable both DEBUG_STRICT and DEBUG_MEMORY_POOLS by
default
CI: github: enable pool debugging by default
DOC: internal: update the pools API to mention boot-time settings
DOC: design: add design thoughts for later simplification of the pools
DOC: design: commit the temporary design notes on thread groups
BUG/MINOR: proxy: preset the error message pointer to NULL in
parse_new_proxy()
BUILD: stream: fix build warning with older compilers
BUG/MINOR: debug: fix get_tainted() to properly read an atomic value
DEBUG: move the tainted stuff to bug.h for easier inclusion
DEBUG: cleanup back trace generation
DEBUG: cleanup BUG_ON() configuration
DEBUG: mark ABORT_NOW() as unreachable
DBEUG: add a new WARN_ON() macro
DEBUG: make the _BUG_ON() macro return the condition
DEBUG: add a new WARN_ON_ONCE() macro
DEBUG: report BUG_ON() and WARN_ON() in the tainted flags
---