Hi,

HAProxy 3.1-dev11 was released on 2024/11/01. It added 125 new commits
after version 3.1-dev10.

We're stabilizing. 37 bugs fixed in one week. I'm not going to review
them, that's far too long and inaccurate, and it'd remind bad memories.
Still some fixes to come, but the team is hard at work on this so I'm
confident. A number of the long painful ones pre-dating 3.0 or even 2.9
were fixed. A big thanks by the way to Felipe and Ricardo for the energy
they've been dedicating to chase a difficult one. I guess we've inflated
their logs quite a bit :-)

Speaking of this, we've also improved the debugging capabilities, in
order to permit to place arbitrary event counters anywhere in the code
and check them from the CLI at run time. Dealing with truncated core
dumps and some without symbols also made us realize that we were not
fully leveraging the power of the post_mortem struct, that has been
significantly enhanced to help navigate through a core even without
symbols and figure many internal entities to try to figure what was
happening. In parallel, we're often missing some stderr outputs of the
backtraces, and the core only contains the last one due to the same
buffer being used in turn with each thread. Now each thread now dumps
its own backtrace in its own buffer, so that the core will contain
them all.

Finally, some gdb scripts that we're using for inspecting cores were
merged (see dev/gdb). Hopefully future bugs will take less guess
work. Some of this work was backported to 3.0 and 2.9 so that we
improve our responsiveness and accuracy on these versions as well.

A pair of new sample fetch functions was added, "last_entity" and
"waiting_entity". They indicate what waiting operation was interrupted
by a timeout or an error, which can often indicate that such error is
in fact in the designated entity. For example if you write a Lua
filter, if there's a bug in an SPOA or a bug in the compression and a
timeout strikes, it will be possible to know that the filter was still
waiting for something that did not happen. Waiting for a body is also
among the detected causes (and reported as the backend or frontend
depending where it happens). Speaking about debugging for logs, the
H1 mux now feeds the debug_str functions with its internal states. A
new converter "when()" will only let the input sample pass through when
a condition is met. For now conditions are very scarce (error, stopping
and a few other ones). The goal is to permit to emit some complementary
info in logs only when really needed (such as the debug_str output).

The abstract socket variant started by Tristan 8 months ago was
finally rebased and merged with the help of Aurélien. This means that
now there's a new family "abnsz" which indicates a zero-terminated ABNS
address that is compatible with certain tools that use them this way, so
now we're compatible with both practices. That's true on both sides, both
front and back. Thanks guys for finishing that work!

Small but useful stuff, the CLI now learned a new "echo" command, that
does the same as in shell. The purpose is to help placing delimiters in
dumps made of the output of multiple chained commands. I used to rely on
short commands like "show version" to place ugly delimiters in diagnostic
scripts, naturally "echo" will be more convenient and will also permit to
show the command that is run for example.

Two new converters, rfc7239_nn and rfc7239_np, permit one to build their
own custom Forwarded header based on any input data from the http-request
ruleset.

QUIC now offers a new token on every new connection, not just 0-RTT ones,
so that the client can reuse it later, possibly avoiding one RTT for
address validation.

New CI updates regarding LibreSSL, MacOS updated to 15 and the entry
of Ubuntu 24.04.

The rest is cleanups (particularly in the master-worker area), a bit more
traces, doc updates, and a bunch of everything as usual.

Again, please test it. It's much better than dev10 in terms of stability,
and it helps us fix trouble before it gets really painful. We're still
aware of some pending bug reports but they also affect 3.0 and sometimes
even 2.9, so if you're "lucky" enough to witness them, the amount of
debugging facilities in 3.1 is vastly superior to previous versions and
should help us figure faster what is happening.

Similarly if you're currently facing bugs on 3.0.5, please give a try to
3.1-dev11. Some issues are already gone and the other ones will be easier
to debug there. We plan to issue 3.0.6 shortly anyway but we'd prefer it
with the least possible known pending bugs.

I plan to issue 3.1-dev12 next week, but I'll be at the HTTP Workshop so
it will likely be delated to Friday (unless someone else does it before).

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.1/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.1/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 (6):
      MINOR: mux-quic: simplify sending of empty STREAM FIN
      BUG/MINOR: mux-quic: do not close STREAM with empty FIN if no data sent
      BUG/MINOR: server: fix dynamic server leak with check on failed init
      BUG/MEDIUM: server: fix race on servers_list during server deletion
      MINOR: quic: complete trace in qc_may_build_pkt()
      MINOR: quic: move qc_send_mux() prototype into quic_tx.h

Aurelien DARRAGON (13):
      DOC: config: fix rfc7239 forwarded typo in desc
      MINOR: http_ext: implement rfc7239_{nn,np} converters
      CLEANUP: http_ext: remove useless BUG_ON() in http_handle_xot_header()
      BUG/MEDIUM: connection/http-reuse: fix address collision on unhandled 
address families
      MINOR: tools: add strnlen2() helper
      CLEANUP: log: use strnlen2() in _lf_text_len() to compute string length
      MEDIUM: protocol: rely on AF_CUST_ABNS family to recognize ABNS sockets
      CLEANUP: tools: rely on address family to detect ABNS sockets
      MINOR: sock: restore effective UNIX family in sock_get_old_sockets()
      MEDIUM: sock: also restore effective unix family in get_{src,dst}()
      MEDIUM: sock_unix: use per-family addrcmp function
      DOC: config: add missing glitch_{cnt,rate} data types
      DOC: config: add missing glitch_{cnt,rate} sample definitions

Christopher Faulet (30):
      BUG/MEDIUM: stconn: Wait iobuf is empty to shut SE down during a check 
send
      MINOR: mux-h1: Show the SD iobuf in trace messages on stream send events
      MINOR: mux-h1: Add a trace on shutdown when keep-alive is not possible
      BUG/MINOR: http-ana: Don't report a server abort if response payload is 
invalid
      BUG/MEDIUM: stconn: Check FF data of SC to perform a shutdown in 
sc_notify()
      BUG/MAJOR: filters/htx: Add a flag to state the payload is altered by a 
filter
      REGTESTS: Never reuse server connection in http-messaging/truncated.vtc
      BUG/MEDIUM: stats-html: Never dump more data than expected during 0-copy 
FF
      BUG/MEDIUM: mux-h2: Remove H2S from send list if data are sent via 0-copy 
FF
      BUG/MINOR: stconn: Pretend the SE have more data to deliver on 
abortonclose
      CLEANUP: stream: remove outdated comments
      DEBUG: stream: Add debug counters to track some client/server aborts
      DEBUG: mux-h1: Add debug counters to track some errors
      MINOR: mux-h1: Add support of the debug string for logs
      DEBUG: mux-h1: Add debug counters to track errors with in/out pending data
      BUG/MINOR: mux-h1: Fix conditions on pipe in some COUNT_IF()
      BUG/MEDIUM: stconn: Report blocked send if sends are blocked by an error
      BUG/MINOR: http-ana: Fix wrong client abort reports during responses 
forwarding
      BUG/MINOR: stconn: Don't disable 0-copy FF if EOS was reported on 
consumer side
      DEBUG: mux-h1: Add H1C expiration dates in trace messages
      BUG/MEDIUM: mux-h1: Fix how timeouts are applied on H1 connections
      BUG/MINOR: http-ana: Report internal error if an action yields on a final 
eval
      MINOR: stream: Save last evaluated rule on invalid yield
      MINOR: stream: Replace last_rule_file/line fields by a more generic field
      MINOR: stream: Save the last filter evaluated interrupting the processing
      MINOR: stream: Save the entity waiting to continue its processing
      MINOR: stream: Use an enum to identify last and waiting entities for 
streams
      MINOR: stream: Add http-buffer-request option in the waiting entities
      DOC: config: Add documentation about last_entity sample fetch
      DOC: config: Add documentation about waiting_entity sample fetch

Dragan Dosen (2):
      BUG/MINOR: sample: free err2 in smp_resolve_args for type ARGT_REG
      MINOR: arg: add an argument type for identifier

Frederic Lecaille (3):
      BUG/MINOR: quic: avoid leaking post handshake frames
      MINOR: quic: send new tokens (NEW_TOKEN) even for 1RTT sessions
      BUG/MEDIUM: quic: avoid freezing 0RTT connections

Ilia Shipitsin (4):
      CI: switch QUIC Interop on AWS-LC to common docker image
      CI: switch QUIC Interop on LibreSSL to common docker image
      CI: enable chacha20 test on LibreSSL QUIC Interop
      CI: LibreSSL QUIC Interop: fix docker context

Ilya Shipitsin (3):
      CI: prepare Coverity build for Ubuntu 24
      CI: bump development builds explicitely to Ubuntu 24.04
      CI: modernize macos builds to macos-15

Tristan (1):
      MEDIUM: socket: add zero-terminated ABNS alternative

Valentine Krasnobaeva (17):
      BUG/MINOR: mworker: fix mworker-max-reloads parser
      BUG/MINOR: mworker/cli: show master startup logs in recovery mode
      MINOR: mworker: stop MASTER proxy listener on worker mcli sockpair
      MINOR: error: simplify startup_logs_init_shm
      BUG/MINOR: mworker: show worker warnings in startup logs
      CLEANUP: mworker: clean mworker_reexec
      MINOR: mworker/cli: split mworker_cli_proxy_create
      CLEANUP: mworker: make mworker_create_master_cli more readable
      BUG/MEIDUM: mworker: fix fd leak from master to worker
      BUG/MINOR: mworker/cli: fix mworker_cli_global_proxy_new_listener
      BUG/MINOR: mworker: mworker_reexec: unset MODE_STARTING before free 
startup logs ring
      BUG/MINOR: errors: startup_logs_free: set global startup_logs ptr to NULL
      BUG/MINOR: errors: print_message: don't allocate startup logs ring
      BUG/MINOR: startup: don't fork worker if started with -c -W
      BUG/MINOR: startup: dump libs only in worker if started with -W -dL
      BUG/MINOR: startup: dump keywords only in worker if started with -W -dKAll
      BUG/MINOR: startup: don't dump polling info for master in verbose mode

William Lallemand (11):
      BUG/MINOR: httpclient: return NULL when no proxy available during 
httpclient_new()
      BUG/MEDIUM: mworker/httpclient: initialization skipped by accident in 
mworker mode
      BUG/MINOR: resolvers/mworker: missing default resolvers in mworker mode
      MINOR: mworker/ocsp: skip ocsp-update proxy init in master
      MINOR: mworker/cli: add 'debug' to 'show proc'
      MINOR: mworker/cli: remove comment line for program when useless
      MINOR: mworker/cli: 'show proc debug' for old workers
      MINOR: cli: remove non-printable characters from 'debug dev fd'
      MINOR: cli: add an 'echo' command
      BUG/MINOR: trace: stop rewriting argv with -dt
      BUG/MINOR: ssl/cli: 'set ssl cert' does not check the transaction name 
correctly

Willy Tarreau (35):
      BUILD: buffers: keep b_getblk_nc() and b_peek_varint() in buf.h
      CLEANUP: buffers: simplify b_get_varint()
      OPTIM: buffers: avoid a useless wrapping check for ofs == 0
      MINOR: debug: make mark_tainted() return the previous value
      MINOR: chunk: drop the global thread_dump_buffer
      MINOR: debug: split ha_thread_dump() in two parts
      MINOR: debug: slightly change the thread_dump_pointer signification
      MINOR: debug: make ha_thread_dump_done() take the pointer to be used
      MINOR: debug: replace ha_thread_dump() with its two components
      MEDIUM: debug: on panic, make the target thread automatically allocate 
its buf
      BUILD: mux-h2/traces: fix build on 32-bit due to size of the DATA frame
      CLEANUP: debug: make the BUG_ON() macros check the condition in the outer 
one
      MEDIUM: debug: add match counters for BUG_ON/WARN_ON/CHECK_IF
      MINOR: debug: add a new debug macro COUNT_IF()
      MINOR: debug: add "debug dev counters" to list code counters
      MINOR: stream: maintain per-stream counters of the number of passes on 
code
      MINOR: filters: add per-filter call counters
      MINOR: sample: add the "when" converter to condition some expressions
      BUILD: spoe: fix build warning on older gcc around sub-struct 
initialization
      Revert "OPTIM: mux-h2: make h2_send() report more accurate wake up 
conditions"
      MINOR: activity/memprofile: show per-DSO stats
      BUILD: debug: silence a build warning with threads disabled
      CLEANUP: mux-h2: remove the unused "full" variable in 
h2_frt_transfer_data()
      MINOR: pools: export the pools variable
      MINOR: debug: place a magic pattern at the beginning of post_mortem
      MINOR: debug: place the post_mortem struct in its own section.
      MINOR: debug: store important pointers in post_mortem
      MINOR: debug: do not limit backtraces to stuck threads
      MINOR: debug: also add a pointer to struct global to post_mortem
      DOC: design: add notes about more detailed error reporting for logs
      MINOR: debug: also add fdtab and acitvity to struct post_mortem
      MINOR: debug: remove the redundant process.thread_info array from 
post_mortem
      DEV: gdb: add a number of gdb scripts to navigate in core dumps
      MEDIUM: protocol: make abns a custom unix socket address family
      MINOR: protocol: create abnsz socket address family

---


Reply via email to