Hi,

HAProxy 2.5-dev8 was released on 2021/09/24. It added 200 new commits
after version 2.5-dev7.

This version looks huge because Fred and Amaury merged a large number of
QUIC/H3 patches (~140 patches, no less!). The code is still in development
state with bugs, known limitations and even debugging messages sometimes,
but it reached an important milestone where it's possible to use curl to
send an HTTP/3 request to haproxy, which forwards it to an HTTP/1 or HTTP/2
server, receives the response and sends it back as HTTP/3 to curl which
displays it. There was no reason for further delaying this merge, it will
significantly help them to continue to work on fresher code without such a
long pending patch queue. By the way, given that QUIC is in experimental
status, I'm willing to take more of such patches till the release, provided
they don't modify other areas, of course.

William added the second part of his work on the native HTTP client. This
time this comes with some Lua bindings. A new "httpclient" class allows
to easily initiate HTTP requests from Lua, which will use the regular HTTP
path internally via the muxes, and as such will support transfer-encoding,
H1/H2 etc. William is still working on the documentation and possibly
completing a few low-level features or settings, but it's already possible
to do something like this in Lua to fetch an object:

  local httpclient = core.httpclient()
  local response = httpclient:get("http://127.0.0.1:9000/?s=9999";)
  core.Debug("Status: ".. res.status .. ", Reason : " .. res.reason ..
             ", Len:" .. string.len(res.body) .. "\n")

Those who are commonly performing HTTP requests from Lua and facing some
limitations are encouraged to have a look at the following commits for more
info, and to provide feedback if they're missing anything or have concerns:

  3956c4ead ("MINOR: httpclient/lua: httpclient:get() API in lua")
  d7df73a11 ("MINOR: httpclient/lua: implement the headers in the response 
object")

Amaury completed the support for some missing keywords on dynamic servers
(slowstart, error-limit, observe).

Christopher and Dragan addressed a bunch of painful bugs causing hung
streams and CPU loops in filters. Some of them will need to be backported.

Thierry provided a "dark mode" CSS for the stats page, because apparently
switching from dark pages to a bright one is painful, and some browsers
on some OSes support this by default (on Linux I had to install a specific
Firefox extension for this). Thierry has no opinion on the chosen colors,
I'm not quite a big fan of them but I'm not used to working in such dark
modes so my opinion does not really count. Those who use this all day and
who would be bothered are really welcome to propose better colors, and in
the worst case the commit may even be reverted if it disturbs more than it
helps (but better try to improve it first). Look for "prefers-color-scheme"
in stats.c if you want to experiment with variations.

I fixed a few more -Wundef warnings in a few files, that would trigger on
less common systems, fixed a number of warnings about unused values that
Ilya reported, and a possible divide by zero bug introduced in the
leastconn LB algo since 2.3 or 2.4. And I also added the "thread" keyword
for "bind" lines and deprecated "process" that forces to always prepend
"1/" in front of the thread ranges. This will provide a smoother transition
to thread groups.

Pierre Cheynier reported a weird random crash on reload on CentOS 8 when
haproxy is linked with jemalloc. Each time it would crash inside glibc
during the call to malloc_trim() that is used to release the local caches
on exit, which likely indicates that an object was first allocated with
glibc's allocator then freed with jemalloc. This made me think that while
there's probably certainly something to fix in the glibc startup code
there, it's pointless from us to call its trim function when not used,
so some code was added to detect whether we're running on glibc or an
external allocator so that we don't call this malloc_trim() function in
the latter case. This will be backported.

Tim sent some cleanups based on Coccinelle, and the respective patches
were merged. I also have a few other ones pending that would be nice to
merge, at least to help developers pick one and modify it for a one-use
case. It's a nice way to rename structure members or clean up some bad
constructs all over the tree.

And I think that's about all for this one. I'm aware that Rémi almost
finished adding some converters to decode and verify JWT tokens, and this
will likely be merged next week, just in time to close the merge window
and focus on cleanups, bug fixes, doc and small stuff.

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.5/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.5/src/CHANGELOG
   Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/

Willy
---
Complete changelog :
Amaury Denoyelle (26):
      BUG/MINOR: connection: prevent null deref on mux cleanup task allocation
      BUILD: ist: prevent gcc11 maybe-uninitialized warning on istalloc
      BUG/MINOR: server: allow 'enable health' only if check configured
      BUG/MINOR: server: alloc dynamic srv ssl ctx if proxy uses ssl chk rule
      MINOR: server: enable more keywords for ssl checks for dynamic servers
      MINOR: server: enable more check related keywords for dynamic servers
      REORG: server: move slowstart init outside of checks
      MINOR: server: enable slowstart for dynamic server
      MINOR: h3: change default settings
      MINOR: quic-enc: fix varint encoding
      MINOR: qpack: fix wrong comment
      MINOR: qpack: generate headers list on decoder
      MINOR: h3: parse headers to htx
      MINOR: h3: allocate stream on headers
      MEDIUM: mux-quic: implement ring buffer on stream tx
      MINOR: mux-quic: send SETTINGS on uni stream
      MINOR: h3: define snd_buf callback and divert mux ops
      MINOR: mux-quic: define FIN stream flag
      MINOR: qpack: create qpack-enc module
      MINOR: qpack: encode headers functions
      MINOR: h3: encode htx headers to QPACK
      MINOR: h3: send htx data
      MINOR: h3/mux: detect fin on last h3 frame of the stream
      MINOR: quic: define close handler
      MEDIUM: quic: implement mux release/conn free
      MINOR: quic: fix qcc subs initialization

Christopher Faulet (12):
      CLEANUP: acl: Remove unused variable when releasing an acl expression
      BUG/MAJOR: mux-h1: Don't eval input data if an error was reported
      BUG/MINOR: tcpcheck: Improve LDAP response parsing to fix LDAP check
      BUG/MINOR: h1-htx: Fix a typo when request parser is reset
      BUG/MEDIUM: mux-h1: Adjust conditions to ask more space in the channel 
buffer
      BUG/MEDIUM: stream-int: Notify stream that the mux wants more room to 
xfer data
      BUG/MEDIUM: stream: Stop waiting for more data if SI is blocked on 
RXBLK_ROOM
      MINOR: stream-int: Set CO_RFL transient/persistent flags apart in 
si_cs_rcv()
      MINOR: htx: Add an HTX flag to know when a message is fragmented
      MINOR: htx: Add a function to know if the free space wraps
      BUG/MEDIUM: stream-int: Defrag HTX message in si_cs_recv() if necessary
      MINOR: stream-int: Notify mux when the buffer is not stuck when calling 
rcv_buf

Dragan Dosen (2):
      BUG/MINOR: flt-trace: fix an infinite loop when random-parsing is set
      BUG/MINOR: http-ana: increment internal_errors counter on response error

Frédéric Lécaille (120):
      BUG/MINOR: quic: Possible NULL pointer dereferencing when dumping streams.
      MINOR: quic: Move transport parmaters to anynomous struct.
      MINOR: mux_quic: Add QUIC mux layer.
      MINOR: connection: Add callbacks definitions for QUIC.
      MINOR: quic: Attach QUIC mux connection objet to QUIC connection.
      MINOR: quic: Add a new definition to store STREAM frames.
      MINOR: h3: Add HTTP/3 definitions.
      MINOR: qpack: Add QPACK compression.
      MINOR: quic_sock: Finalize the QUIC connections.
      MINOR: quic: Disable the action of ->rcv_buf() xprt callback
      MINOR: quic: Add callbacks for (un)scribing to QUIC xprt.
      MINOR: quic: Variable-length integer encoding/decoding into/from buffer 
struct.
      BUG/MINOR: quic: Wrong ->accept() error handling
      MINOR: quic: Add a wrapper function to update transport parameters.
      MINOR: quic: Update the streams transport parameters.
      MINOR: quic: Avoid header collisions
      MINOR: quic: Replace max_packet_size by max_udp_payload size.
      MINOR: quic: Enable some quic, h3 and qpack modules compilation.
      MINOR: quic: Move an SSL func call from QUIC I/O handler to the xprt init.
      MINOR: quic: Initialize the session before starting the xprt.
      BUG/MINOR: quic: Do not check the acception of a new conn from I/O 
handler.
      MINOR: quic: QUIC conn initialization from I/O handler
      MINOR: quic: Remove header protection for conn with context
      MINOR: quic: Derive the initial secrets asap
      MINOR: quic: Remove header protection also for Initial packets
      BUG/MINOR: quic: Wrong memory free in quic_update_ack_ranges_list()
      MINOR: quic: quic_update_ack_ranges_list() code factorization
      MINOR: quic: Useless test in quic_update_ack_ranges_list()
      MINOR: quic: Remove a useless variable in quic_update_ack_ranges_list()
      BUG/MINOR: quic: Missing cases treatement when updating ACK ranges
      CLEAUNUP: quic: Usage of a useless variable in qc_treat_rx_pkts()
      BUG/MINOR: quic: Wrong RX packet reference counter usage
      MINOR: quic: Do not stop the packet parsing too early in 
qc_treat_rx_packets()
      MINOR: quic: Add a lock for RX packets
      MINOR: quic: Move the connection state
      MINOR: quic: Replace quic_conn_ctx struct by ssl_sock_ctx struct
      MINOR: quic: Replace the RX list of packet by a thread safety one.
      MINOR: quic: Replace the RX unprotected packet list by a thread safety 
one.
      MINOR: quic: Add useful traces for I/O dgram handler
      MINOR: quic: Do not wakeup the xprt task on ACK receipt
      MINOR: quic: Connection allocations rework
      MINOR: quic: Move conn_prepare() to ->accept_conn() callback
      MINOR: quic: Make qc_lstnr_pkt_rcv() be thread safe.
      MINOR: quic: Add a ring buffer implementation for QUIC
      MINOR: quic: Prefer x25519 as ECDH preferred parametes.
      MINOR: quic: Add the QUIC v1 initial salt.
      BUG/MINOR: quic: Too much reduced computed space to build handshake 
packets
      MINOR: net_helper: add functions for pointers
      MINOR: quic: Add ring buffer definition (struct qring) for QUIC
      MINOR: proto_quic: Allocate TX ring buffers for listeners
      MINOR: quic: Initialize pointers to TX ring buffer list
      MINOR: quic: Make use of TX ring buffers to send QUIC packets
      MINOR: quic_tls: Make use of the QUIC V1 salt.
      MINOR: quic: Remove old TX buffer implementation
      MINOR: Add function for TX packets reference counting
      MINOR: quic: Add TX packets at the very last time to their tree.
      MINOR: quic: Unitialized mux context upon Client Hello message receipt.
      MINOR: quic: Missing encryption level rx.crypto member initialization and 
lock.
      MINOR: quic: Rename ->rx.rwlock of quic_enc_level struct to 
->rx.pkts_rwlock
      MINOR: quic: Make qc_treat_rx_pkts() be thread safe.
      MINOR: quic: Make ->tx.frms quic_pktns struct member be thread safe
      MINOR: quic: Replace quic_tx_frm struct by quic_frame struct
      MINOR: quic: Add a mask for TX frame builders and their authorized packet 
types
      MINOR: quic: Add a useful function to compute any frame length.
      MINOR: quic: Add the QUIC connection state to traces
      MINOR: quic: Store post handshake frame in ->pktns.tx.frms MT_LIST
      MINOR: quic: Add the packet type to quic_tx_packet struct
      MINOR: quic: Modify qc_do_build_hdshk_pkt() to accept any packet type
      MINOR: quic: Atomically handle packet number space ->largest_acked_pn 
variable
      MINOR: quic: Modify qc_build_cfrms() to support any frame
      MINOR: quic: quic_conn_io_cb() task rework
      MINOR: quic: Make qc_build_hdshk_pkt() atomically consume a packet number
      MINOR: quic: qc_do_build_hdshk_pkt() does not  need to pass a copy of 
CRYPTO frame
      MINOR: quic: Remove Application level related functions
      MINOR: quic: Rename functions which do not build only Handshake packets
      MINOR: quic: Make circular buffer internal buffers be variable-sized.
      MINOR: quic: Add a pool for TX ring buffer internal buffer
      MINOR: quic: Make use of the last cbuf API when initializing TX ring 
buffers
      MINOR: quic: Missing acks encoded size updates.
      MINOR: quic: Evaluate the packet lengths in advance
      MINOR: quic: Update the TLS extension for QUIC transport parameters
      MINOR: quic: Fix handshake state debug strings
      MINOR: quic: Atomically get/set the connection state
      MINOR: quic: Missing QUIC encryption level for qc_build_pkt()
      MINOR: quic: Coalesce Application level packets with Handshake packets.
      MINOR: quic: Wrong flags handling for acks
      MINOR: quic: Missing case when discarding HANDSHAKE secrets
      MINOR: quic: Post handshake packet building improvements
      MINOR: quic: Prepare Application level packet asap.
      MINOR: h3: Send h3 settings asap
      MINOR: quic: Wrong STREAM frame length computing
      MINOR: quic: Wrong short packet minimum length
      MINOR: quic: Prepare STREAM frames to fill QUIC packets
      MINOR: quic: Shorten some handshakes
      MINOR: quic: Make QUIC-TLS support at least two initial salts
      MINOR: quic: Attach the QUIC connection to a thread.
      MINOR: quic: Missing active_connection_id_limit default value
      MINOR: quic_sock: Do not flag QUIC connections as being set
      MINOR: buf: Add b_force_xfer() function
      MINOR: quic: Make use of buffer structs to handle STREAM frames
      MINOR: mux_quic: move qc_process() code to qc_send()
      MINOR: quic: Add a typedef for unsigned long long
      MINOR: quic: Confusion between TX/RX for the frame builders
      MINOR: quic: Wrong packet flags settings during frame building
      MINOR: quic: Constantness fixes for frame builders/parsers.
      MINOR: quic_tls: Client/serveur state reordering
      MINOR: quic: Wrong packet loss detection due to wrong pktns order
      MINOR: quic: Wrong packet number space selection in quic_loss_pktns()
      MINOR: quic: Initial packet number spaced not discarded
      MINOR: quic: Add useful trace about pktns discarding
      MINOR: mux_quic: Export the mux related flags
      MINOR: quic: Implement quic_conn_subscribe()
      MINOR: quic: Wake up the mux upon ACK receipt
      MINOR: quic: Stream FIN bit fix in qcs_push_frame()
      MINOR: quic: Implement qc_process_mux()
      MINOR: quic: Wake up the xprt from mux
      CLEANUP: quic: Remove useless inline functions
      MINOR: quic: RX packets memory leak
      MINOR: quic: Possible endless loop in qc_treat_rx_pkts()
      MINOR: quic: Crash upon too big packets receipt

Thierry Fournier (2):
      MINOR: stats: Enable dark mode on stat web page
      CLEANUP: stats: Fix some alignment mistakes

Tim Duesterhus (13):
      DOC: Add .mailmap
      CLEANUP: tree-wide: fix prototypes for functions taking no arguments.
      CLEANUP: Remove prototype for non-existent thread_get_default_count()
      CLEANUP: Apply ist.cocci
      DEV: coccinelle: Add ist.cocci
      CLEANUP: Apply bug_on.cocci
      DEV: coccinelle: Add xalloc_size.cocci
      DEV: coccinelle: Add bug_on.cocci
      CLEANUP: Apply xalloc_size.cocci
      DEV: coccinelle: Add xalloc_cast.cocci
      CLEANUP: Include check.h in flt_spoe.c
      CLEANUP: Remove unreachable `break` from parse_time_err()
      CLEANUP: slz: Mark `reset_refs` as static

William Lallemand (7):
      DOC: management: certificate files must be sanitized before injection
      MINOR: httpclient: add the EOH when no headers where provided
      MINOR: httpclient: httpclient_data() returns the available data
      MINOR: httpclient: httpclient_ended() returns 1 if the client ended
      MINOR: httpclient/lua: httpclient:get() API in lua
      MINOR: httpclient/lua: implement the headers in the response object
      BUG/MINOR: httpclient/lua: return an error on argument check

Willy Tarreau (18):
      BUILD: compiler: fixed a missing test on  defined(__GNUC__)
      BUILD: halog: fix a -Wundef warning on non-glibc systems
      BUILD: threads: fix -Wundef for _POSIX_PRIORITY_SCHEDULING on libmusl
      BUG/MINOR: compat: make sure __WORDSIZE is always defined
      BUILD: sample: fix format warning on 32-bit archs in 
sample_conv_be2dec_check()
      CLEANUP: pools: factor all malloc_trim() calls into trim_all_pools()
      MINOR: pools: automatically disable malloc_trim() with external allocators
      MINOR: pools: report it when malloc_trim() is enabled
      DOC: update Tim's address in .mailmap
      MINOR: pools: use mallinfo2() when available instead of mallinfo()
      BUG/MINOR: cli/payload: do not search for args inside payload
      BUILD: sockpair: do not set unused flag
      BUILD: proto_uxst: do not set unused flag
      BUILD: fd: remove unused variable totlen in fd_write_frag_line()
      MINOR: applet: remove the thread mask from appctx_new()
      REORG: threads: move ha_get_pthread_id() to tinfo.h
      MEDIUM: listener: deprecate "process" in favor of "thread" on bind lines
      BUG/MEDIUM: leastconn: fix rare possibility of divide by zero

---

Reply via email to