Hi,
HAProxy 3.0-dev8 was released on 2024/04/19. It added 115 new commits
after version 3.0-dev7.
3.0-dev7 showed some recent issues related to stick-tables and peers,
which mechanically inflated the number of fixes in this version (32).
Thanks to Christian Ruppert, Felipe Damasio and Ricardo Sanchez for their
quick and helpful reports BTW, because 3.0-dev7 was still warm out of the
oven that the reports started to come about problems!
Here are the main changes:
- the stick-tables issues and peers problems were addressed. However, this
also led to other bugs being discovered on peers, related to recent
changes and that were fixed as well. Next week we'll have an in-depth
review there to make sure there is no other one. At this point we're not
aware of any remaining one in this area.
- another crash was caused by the recent ring changes and affected the
startup logs. Technically speaking, upon reload the buffer was
reallocated of the previous usable size, so 192 bytes were lost upon
every process switchover, which didn't cope well with ring buffers that
were full of logs...
- the evports polling system on Solaris uses a strange API and didn't cope
well with signals and could lose some event reports resulting in an
inconsistency between the internal FD polling state and the one in the
system, which was visible as spinning loops when using external checks.
In addition, it was found that there was a leftover from a debugging
session since day 1 there, by which it would only handle a single event
per loop, making it very inefficient!
- the other issues fixed in various areas are a bit more technical and out
of scope here, and will be more detailed when backported to their
respective stable branches.
- as I mentioned last week, the makefile was updated so that it is easier
to pass CFLAGS/LDFLAGS etc and no longer necessary to hack into
DEBUG_CFLAGS and such cryptic variables. The few that were dropped will
cause the emission of warning and an advice when set so that packagers
will quickly figure what to change. William even suggested that we bail
on error when ERR=1, which I agree with, but it was not done yet. Also,
now if an unknown USE_foo= option is passed on the make command line, a
warning will mention that it's ignored. This should avoid common typos
like inverted words in long names.
- some of the internal "shutdown" API was cleaned up (one function instead
of one per direction), in the hope that it will at least pave the way to
more easily forward errors verbatim between sides (e.g. gRPC events).
- a new "crt-store" configuration section is supported, it allows to
declare certificates by specifying the path for each element. The aim
is essentially to decorellate the storage from the instantiation, both
of which are currently correlated in crt-lists, and to allow easier
specification of individual components. For example:
crt-store
load crt "/crt/site1.crt" key "/keys/site1.key" ocsp "/ocsp/site1.ocsp"
load crt "/crt/site2.crt" key "/keys/site2.key"
In addition, it's possible to set a "crt-base" and a "key-base" there so
that the path doesn't have to be repeated on each line. The certificates
also support aliases so that they can be referenced from a bind line with
a more convenient names, e.g.:
crt-store web
crt-base /etc/ssl/certs/
key-base /etc/ssl/private/
load crt "site3.crt" alias "site3"
load crt "site4.crt" key "site4.key"
frontend in2
bind *:443 ssl crt "@web/site3" crt "@web/site4.crt"
- the backend equivalent of the frontend keylog mechanism was implemented,
so that it is now possible to decipher TLS captures on the backend side.
The log-format to be used becomes a bit large, please refer to the
example in the doc.
- some cleanup was performed on low level QUIC sending functions. Most
notably, duplicated code is removed. The main objective is to facilitate
the development of new features on top of these functions. As
complement, small optimizations to avoid unnecessary function calls are
also introduced which could improve performance slightly.
- the way the memory limitation specified by "-m" on the command line was
handled on Linux using RLIMIT_AS got completely useless over time due to
much more fragmented memory spaces on 64-bit platforms, ASLR, and the
fact that it had been chosen exclusively to avoid underestimating the
allocated buffers' cost, which originally were allocated all the time
even when empty. But nowadays this is no longer relevant since they're
only allocated when used. This had the nasty effect of causing OOMs way
below the configured limit, rendering it pretty useless. Now we've
dropped this specific case and went back to RLIMIT_DATA like on other
OSes.
- some build warnings were addressed with older compilers.
- various other cleanups and code reorganization to help with pending
changes and long term maintenance.
- CI updates (macos version, attempt to dump ASAN output, revert of
workaround for aslr changes).
- And doc updates and cleanups.
Among the stuff in process of being finished soon that I'm aware of, are
the stats dump/handover that are currently delayed a bit by the need to
seriously clean that old code base (not many changes but they have to be
applied all over a massive file, that will be split), finalization of the
shutdown/error transfer changes, some log encoding stuff, an attempt at
finally fixing the buffer_wait stuff (emergency allocation on low memory)
or to make it fail cleanly, then all the small things which will depend on
the amount of time left by bug reports.
>From now on I'll try to switch again to weekly releases so that testers
can more easily follow the small changes and/or the effectiveness of the
fixes for issues they'll have reported.
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.0/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.0/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 (11):
MINOR: quic: simplify qc_send_hdshk_pkts() return
MINOR: quic: uniformize sending methods for handshake
MINOR: quic: improve sending API on retransmit
MINOR: quic: use qc_send_hdshk_pkts() in handshake IO cb
MEDIUM: quic: remove duplicate hdshk/app send functions
OPTIM: quic: do not call qc_send() if nothing to emit
OPTIM: quic: do not call qc_prep_pkts() if everything sent
BUG/MINOR: guid: fix crash on invalid guid name
MINOR: stats: remove implicit static trash_chunk usage
REORG: stats: extract HTML related functions
REORG: stats: extract JSON related functions
Andrey Lebedev (1):
DOC: management: fix typos
Aurelien DARRAGON (6):
BUG/MINOR: log: fix lf_text_len() truncate inconsistency
BUG/MINOR: tools/log: invalid encode_{chunk,string} usage
BUG/MINOR: log: invalid snprintf() usage in sess_build_logline()
CLEANUP: log: lf_text_len() returns a pointer not an integer
BUG/MEDIUM: peers: fix localpeer regression with 'bind+server' config
style
MINOR: peers: stop relying on srv->addr to find peer port
Christopher Faulet (28):
BUG/MINOR: cli: Don't warn about a too big command for incomplete commands
BUG/MEDIUM: http-ana: Deliver 502 on keep-alive for fressh server
connection
BUG/MINOR: http-ana: Fix TX_L7_RETRY and TX_D_L7_RETRY values
BUG/MEDIUM: cache/stats: Handle inbuf allocation failure in the I/O
handler
MINOR: peers: Split resync process function to separate running/stopping
states
MINOR: peers: Add 2 peer flags about the peer learn status
MINOR: peers: Add flags to report the peer state to the resync task
MINOR: peers: sligthly adapt part processing the stopping signal
MINOR: peers: Add functions to commit peer changes from the resync task
BUG/MINOR: peers: Report a resync was explicitly requested from a
thread-safe manner
BUG/MAJOR: peers: Update peers section state from a thread-safe manner
MEDIUM: peers: Only lock one peer at a time in the sync process function
MINOR: peer: Restore previous peer flags value to ease debugging
BUG/MEDIUM: stconn: Don't forward channel data if input data must be
filtered
BUG/MEDIUM: applet: Fix applet API to put input data in a buffer
BUG/MEDIUM: spoe: Always retry when an applet fails to send a frame
BUG/MEDIUM: peers: Fix exit condition when max-updates-at-once is reached
BUILD: linuxcap: Properly declare prepare_caps_from_permitted_set()
BUG/MINOR: stconn: Fix sc_mux_strm() return value
MINOR: mux-pt: Test conn flags instead of sedesc ones to perform a full
close
MINOR: stconn/connection: Move shut modes at the SE descriptor level
MINOR: stconn: Rewrite shutdown functions to simplify the switch
statements
MEDIUM: stconn: Use only one SC function to shut connection endpoints
MEDIUM: stconn: Explicitly pass shut modes to shut applet endpoints
MEDIUM: stconn: Use one function to shut connection and applet endpoints
MEDIUM: muxes: Use one callback function to shut a mux stream
BUG/MEDIUM: peers: Don't set PEERS_F_RESYNC_PROCESS flag on a peer
BUG/MEDIUM: peers: Fix state transitions of a peer
Damien Claisse (1):
BUG/MINOR: server: fix slowstart behavior
Frederic Lecaille (2):
MINOR: net_helper: Add support for floats/doubles.
BUG/MEDIUM: grpc: Fix several unaligned 32/64 bits accesses
Ilya Shipitsin (4):
CI: revert kernel addr randomization introduced in 3a0fc864
CI: reduce ASAN log redirection umbrella size
CLEANUP: assorted typo fixes in the code and comments
CI: modernize macos matrix
Olivier Houchard (1):
MINOR: stats: Get the right prototype for stats_dump_html_end().
Valentine Krasnobaeva (3):
MINOR: listener/protocol: add proto name in alerts
MINOR: proto_quic: add proto name in alert
MINOR: init: use RLIMIT_DATA instead of RLIMIT_AS
William Lallemand (15):
MINOR: ssl: add the section parser for 'crt-store'
DOC: configuration: Add 3.12 Certificate Storage
REGTESTS: ssl: test simple case of crt-store
MINOR: ssl: rename ckchs_load_cert_file to new_ckch_store_load_files_path
MINOR: ssl/crtlist: alloc ssl_conf only when a valid keyword is found
CLEANUP: ssl: remove dead code in cfg_parse_crtstore()
MINOR: ssl: supports crt-base in crt-store
MINOR: ssl: 'key-base' allows to load a 'key' from a specific path
MEDIUM: ssl: support aliases in crt-store
BUG/MINOR: ssl: check on forbidden character on wrong value
BUG/MINOR: ssl: fix crt-store load parsing
MEDIUM: ssl: support a named crt-store section
MEDIUM: ssl: crt-base and key-base local keywords for crt-store
MAJOR: ssl: use the msg callback mecanism for backend connections
MINOR: ssl: implement keylog fetches for backend connections
Willy Tarreau (43):
BUG/MINOR: listener: always assign distinct IDs to shards
BUILD: makefile: warn about unknown USE_* variables
BUILD: makefile: support USE_xxx=0 as well
BUILD: atomic: fix peers build regression on gcc < 4.7 after recent
changes
BUG/MINOR: debug: make sure DEBUG_STRICT=0 does work as documented
BUILD: cache: fix non-inline vs inline declaration mismatch to silence a
warning
BUILD: debug: make DEBUG_STRICT=1 the default
BUILD: pools: make DEBUG_MEMORY_POOLS=1 the default option
CI: update the build options to get rid of unneeded DEBUG options
BUILD: makefile: get rid of the config CFLAGS variable
BUILD: makefile: allow to use CFLAGS to append build options
BUILD: makefile: drop the SMALL_OPTS settings
BUILD: makefile: move -O2 from CPU_CFLAGS to OPT_CFLAGS
BUILD: makefile: get rid of the CPU variable
BUILD: makefile: drop the ARCH variable and better document ARCH_FLAGS
BUILD: makefile: extract ARCH_FLAGS out of LDFLAGS
BUILD: makefile: move the fwrapv option to STD_CFLAGS
BUILD: makefile: make the ERR variable also support 0
BUILD: makefile: add FAILFAST to select the -Wfatal-errors behavior
BUILD: makefile: extract -Werror/-Wfatal-errors from automatic CFLAGS
BUILD: makefile: split WARN_CFLAGS from SPEC_CFLAGS
BUILD: makefile: rename SPEC_CFLAGS to NOWARN_CFLAGS
BUILD: makefile: do not pass warnings to VERBOSE_CFLAGS
BUILD: makefile: also drop DEBUG_CFLAGS
CLEANUP: makefile: make the output of the "opts" target more readable
DOC: install: clarify the build process by splitting it into subsections
BUG/MEDIUM: stick-tables: fix the task's next expiration date
CLEANUP: stick-tables: always respect the to_batch limit when trashing
BUG/MEDIUM: peers/trace: fix crash when listing event types
BUG/MAJOR: stick-tables: fix race with peers in entry expiration
DEBUG: pool: improve decoding of corrupted pools
REORG: pool: move the area dump with symbol resolution to tools.c
DEBUG: pools: report the data around the offending area in case of
mismatch
BUG/MINOR: lru: fix the standalone test case for invalid revision
MINOR: ring: clarify the usage of ring_size() and add
ring_allocated_size()
BUG/MAJOR: ring: use the correct size to reallocate startup_logs
MINOR: ring: always check that the old ring fits in the new one in
ring_dup()
BUILD: cache: fix a build warning with gcc < 7
BUILD: xxhash: silence a build warning on Solaris + gcc-5.5
BUG/MEDIUM: evports: do not clear returned events list on signal
MEDIUM: evports: permit to report multiple events at once
BUG/MINOR: sock: handle a weird condition with connect()
BUG/MINOR: fd: my_closefrom() on Linux could skip contiguous series of
sockets
---