Hi,

HAProxy 2.7-dev1 was released on 2022/06/24. It added 131 new commits
after version 2.7-dev0.

There's not that much new stuff yet but plenty of small issues were
addressed, and it's already been 3 weeks since the release thus I figured
it was a perfect timing for a -dev1 for those who want to stay on the edge
without taking much risks.

In addition to the fixes that went into 2.6.1 already, some HTTP/3 issues
were addressed and a memory leak affecting QUIC was addressed as well (thanks
to @Tristan971 for his precious help on this one). 

Aside fixes, a few improvements started already. First, and to finish on
QUIC, the QUICv2 version negotiation was implemented. This will allow us
to follow the progress on the QUICv2 drafts more closely.

On HTTP/2, the maintainer of the Lighttpd web server reported a nasty case
that he observed between curl and lighttpd which is very similar to the so
called "Silly Window Syndrom" in TCP where a difference of one byte between
a buffer size and a window size may progressively make the transfer
degenerate until almost all frames are 1-byte in size. It's not a bug in
any product, just a consequence of making certain standard-compliant stacks
interoperate. Some workarounds were placed in various components that
allowed the issue to appear. We did careful testing on haproxy and couldn't
produce it there, in part due to our buffer management that makes it
difficult to read exactly the sizes that produce the issue. But there's
nothing either that can strictly prevent it from happening (e.g. with a
sender using smaller frames maybe). So we implemented the workaround as
well, which will also result in sending slightly less frames during
uploads. The goal is to backport this once it has been exposed for a
while without trouble in 2.7.

Another noticeable improvement is the inclusion of a feature that had
been written in the now dead ROADMAP file for 15 years: multi-criteria
bandwidth limiting. It allows to combine multiple filters to enforce
bandwidth limitations on arbitrary criteria by looking at their total
rate in a stick table. Thus it's possible to have per-source, per-
destination, per-network, per-AS, per-interface bandwidth limits in
each direction. In addition there's a stream-specific pair of limits
(one per direction as well) that can even be adjusted on the fly. We
could for example imagine that a client sends a POST request to a
server, that the server responds with a 100-Continue and a header
indicating the max permitted upload bandwidth, and then the transfer
will be automatically capped. Quite frankly, I've been wanting this
for a long time to address the problem of buffer bloat on small links
(e.g. my old ADSL line), and here there's now an opportunity to
maintain a good quality of service without saturating links thanks to
this. I'm pretty sure that some users will be creative and may even
come up with ideas of improvements ;-)

We noticed during the initial QUIC tests that some users faced problems
because they were linking external Lua libs that were built with
incompatible versions of OpenSSL, resulting in some objects being
allocated with one lib and modified with the other, etc. Sometimes the
crash happened during the boot, sometimes at runtime. As this is a
nightmare to diagnose ("show libs" helped a lot there), there's now a
warning at boot when it's detected that some runtime libs bring some
incompatible dependencies by changing a few critical functions such as
malloc(), free() and a few OpenSSL functions. It's not perfect, it's
not rocket science either but it seems to do the job. I'm not totally
sold on the solution, so I'm interested in hearing about any unexpected
report so that we can see if we need to relax some checks (e.g. by
making a special case of openssl and comparing ABI versions maybe).
Such a mess reminded me why I was against adopting a module-oriented
architecture a decade ago :-)

And the rest is essentially cleanups, small refactorings, etc.

At the moment, this version is the most stable 2.7 as all known bugs were
fixed, and nothing risky was merged yet, so it's the right moment to play
with it, particularly if you want to test QUIC or bandwidth limiting.

Some more sensitive updates will come soon in various areas including
threading. The work on pushing the thread limit beyond 64 continues,
we're still far from it but the scheduler was updated so that a series
will be merged soon.

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.7/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.7/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
   Latest builds    : http://www.haproxy.org/l/dev-packages

Willy
---
Complete changelog :
Amaury Denoyelle (23):
      MINOR: connection: support HTTP/3.0 for smp_*_http_major fetch
      MINOR: h3: add h3c pointer into h3s instance
      MINOR: mux-quic: simplify decode_qcs API
      MINOR: mux-quic/h3: adjust demuxing function return values
      BUG/MINOR: h3: fix return value on decode_qcs on error
      BUG/MINOR: h3: fix incorrect BUG_ON assert on SETTINGS parsing
      BUG/MINOR: h3: fix frame type definition
      BUG/MEDIUM: h3: fix SETTINGS parsing
      BUG/MEDIUM: mux-quic: fix flow control connection Tx level
      MINOR: mux-quic: complete BUG_ON on TX flow-control enforcing
      BUG/MINOR: mux-quic: fix memleak on frames rejected by transport
      BUG/MEDIUM: mux-quic: fix segfault on flow-control frame cleanup
      MINOR: qpack: add comments and remove a useless trace
      MINOR: qpack: reduce dependencies on other modules
      BUG/MINOR: qpack: support header litteral name decoding
      MINOR: qpack: add ABORT_NOW on unimplemented decoding
      BUG/MINOR: h3/qpack: deal with too many headers
      MINOR: qpack: improve decoding function
      MINOR: qpack: implement standalone decoder tool
      BUG/BUILD: h3: fix wrong label name
      BUG/MINOR: quic: purge conn Rx packet list on release
      BUG/MINOR: quic: free rejected Rx packets
      BUG/MINOR: qpack: abort on dynamic index field line decoding

Benoit DOLEZ (1):
      BUILD: quic: fix anonymous union for gcc-4.4

Christopher Faulet (51):
      BUG/MINOR: ssl_ckch: Free error msg if commit changes on a cert entry 
fails
      BUG/MINOR: ssl_ckch: Free error msg if commit changes on a CA/CRL entry 
fails
      BUG/MEDIUM: ssl_ckch: Don't delete a cert entry if it is being modified
      BUG/MEDIUM: ssl_ckch: Don't delete CA/CRL entry if it is being modified
      BUG/MINOR: ssl_ckch: Don't duplicate path when replacing a cert entry
      BUG/MINOR: ssl_ckch: Don't duplicate path when replacing a CA/CRL entry
      BUG/MEDIUM: ssl_ckch: Rework 'commit ssl cert' to handle full buffer cases
      BUG/MEDIUM: ssl_ckch: Rework 'commit ssl ca-file' to handle full buffer 
cases
      BUG/MEDIUM: ssl/crt-list: Rework 'add ssl crt-list' to handle full buffer 
cases
      BUG/MEDIUM: httpclient: Don't remove HTX header blocks before duplicating 
them
      BUG/MEDIUM: httpclient: Rework CLI I/O handler to handle full buffer cases
      MEDIUM: httpclient: Don't close CLI applet at the end of a response
      MEDIUM: http-ana: Always report rewrite failures as PRXCOND in logs
      REGTESTS: abortonclose: Add a barrier to not mix up log messages
      REGTESTS: http_request_buffer: Increase client timeout to wait "slow" 
clients
      CLEANUP: ssl_ckch: Use corresponding enum for 
commit_cacrlfile_ctx.cafile_type
      MINOR: ssl_ckch: Simplify I/O handler to commit changes on CA/CRL entry
      BUG/MINOR: ssl_ckch: Use right type for old entry in show_crlfile_ctx
      BUG/MINOR: ssl_ckch: Dump CRL transaction only once if show command yield
      BUG/MINOR: ssl_ckch: Dump CA transaction only once if show command yield
      BUG/MINOR: ssl_ckch: Dump cert transaction only once if show command yield
      BUG/MINOR: ssl_ckch: Init right field when parsing "commit ssl crl-file" 
cmd
      CLEANUP: ssl_ckch: Remove unused field in commit_cacrlfile_ctx structure
      MINOR: ssl_ckch: Simplify structure used to commit changes on CA/CRL 
entries
      MINOR: ssl_ckch: Remove service context for "set ssl cert" command
      MINOR: ssl_ckch: Remove service context for "set ssl ca-file" command
      MINOR: ssl_ckch: Remove service context for "set ssl crl-file" command
      BUG/MINOR: ssl_ckch: Fix possible uninitialized value in show_cert I/O 
handler
      BUG/MINOR: ssl_ckch: Fix possible uninitialized value in show_cafile I/O 
handler
      BUG/MINOR: ssl_ckch: Fix possible uninitialized value in show_crlfile I/O 
handler
      BUILD: ssl_ckch: Fix build error about a possible uninitialized value
      BUG/MINOR: ssl_ckch: Fix another possible uninitialized value
      REGTESTS: http_abortonclose: Extend supported versions
      REGTESTS: restrict_req_hdr_names: Extend supported versions
      BUG/MINOR: trace: Test server existence for health-checks to get proxy
      BUG/MINOR: checks: Properly handle email alerts in trace messages
      BUG/MEDIUM: mailers: Set the object type for check attached to an email 
alert
      REGTESTS: healthcheckmail: Update the test to be functionnal again
      REGTESTS: healthcheckmail: Relax health-check failure condition
      BUG/MINOR: tcp-rules: Make action call final on read error and delay 
expiration
      CLEANUP: check: Remove useless tests on check's stream-connector
      BUG/MEDIUM: stconn: Don't wakeup applet for send if it won't consume data
      BUG/MEDIUM: cli: Notify cli applet won't consume data during request 
processing
      BUG/MEDIUM: stream: Properly handle destructive client connection upgrades
      MINOR: stream: Rely on stconn flags to abort stream destructive upgrade
      CLEANUP: stconn: Don't expect to have no sedesc on detach
      BUG/MINOR: log: Properly test connection retries to fix dontlog-normal 
option
      BUG/MINOR: http-ana: Set method to HTTP_METH_OTHER when an HTTP txn is 
created
      BUG/MINOR: http-fetch: Use integer value when possible in "method" sample 
fetch
      MINOR: freq_ctr: Add a function to get events excess over the current 
period
      MEDIUM: bwlim: Add support of bandwith limitation at the stream level

Frédéric Lécaille (19):
      BUG/MINOR: quic: Stop hardcoding Retry packet Version field
      MINOR: quic: Add several nonce and key definitions for Retry tag
      BUG/MINOR: quic: Wrong PTO calculation
      MINOR: quic: Parse long packet version from qc_parse_hd_form()
      CLEANUP: quid: QUIC draft-28 no more supported
      MEDIUM: quic: Add QUIC v2 draft support
      MINOR: quic: Released QUIC TLS extension for QUIC v2 draft
      MEDIUM: quic: Compatible version negotiation implementation (draft-08)
      CLEANUP: quic: Remove any reference to boringssl
      BUILD: quic: Wrong HKDF label constant variable initializations
      BUG/MINOR: quic: Unexpected half open connection counter wrapping
      BUG/MINOR: quic_stats: Duplicate "quic_streams_data_blocked_bidi" field 
name
      BUG/MINOR: quic: Acknowledgement must be forced during handshake
      MINOR: quic: Dump version_information transport parameter
      BUG/MINOR: quic: Missing acknowledgments for trailing packets
      BUG/MINOR: quic: Wrong reuse of fulfilled dgram RX buffer
      BUG/MAJOR: quic: Big RX dgrams leak when fulfilling a buffer
      BUG/MAJOR: quic: Big RX dgrams leak with POST requests
      BUILD: quic+h3: 32-bit compilation errors fixes

Glenn Strauss (1):
      OPTIM: mux-h2: increase h2_settings_initial_window_size default to 64k

Remi Tricot-Le Breton (1):
      BUG/MINOR: ssl: Do not look for key in extra files if already in pem

Tim Duesterhus (1):
      CLEANUP: Re-apply xalloc_size.cocci (2)

William Lallemand (3):
      BUG/MEDIUM: ssl/cli: crash when crt inserted into a crt-list
      REGTESTS: ssl: add the same cert for client/server
      BUG/MEDIUM: mworker: use default maxconn in wait mode

Willy Tarreau (31):
      BUILD: compiler: implement unreachable for older compilers too
      DEV: tcploop: reorder options in the usage message
      DEV: tcploop: make the current address the default address
      DEV: tcploop: make it possible to change the target address of a connect()
      DEV: tcploop: factor out the socket creation
      DEV: tcploop: permit port 0 to ease handling of default options
      DEV: tcploop: add a new "bind" command to bind to ip/port.
      DEV: tcploop: add minimal UDP support
      MEDIUM: mux-h2: try to coalesce outgoing WINDOW_UPDATE frames
      BUG/MINOR: cli/stats: add missing trailing LF after JSON outputs
      BUG/MINOR: server: do not enable DNS resolution on disabled proxies
      BUG/MINOR: cli/stats: add missing trailing LF after "show info json"
      DOC: design: update the notes on thread groups
      MINOR: task: move profiling bit to per-thread
      CLEANUP: quic: use task_new_on() for single-threaded tasks
      MINOR: tinfo: remove the global thread ID bit (tid_bit)
      CLEANUP: hlua: check for at least 2 threads on a task
      MINOR: thread: get rid of MAX_THREADS_MASK
      OPTIM: task: do not consult shared WQ when we're already full
      DOC: design: update the task vs thread affinity requirements
      BUG/MINOR: task: fix thread assignment in tasklet_kill()
      MINOR: hlua: don't dump empty entries in hlua_traceback()
      MINOR: hlua: add a new hlua_show_current_location() function
      MEDIUM: debug: add a tainted flag when a shared library is loaded
      MEDIUM: debug: detect redefinition of symbols upon dlopen()
      MINOR: intops: add a function to return a valid bit position from a mask
      TESTS: add a unit test for one_among_mask()
      BUILD: ssl_ckch: fix "maybe-uninitialized" build error on gcc-9.4 + ARM
      BUG/MINOR: stream: only free the req/res captures when set
      CLEANUP: pool/tree-wide: remove suffix "_pool" from certain pool names
      MEDIUM: debug: improve DEBUG_MEM_STATS to also report pool alloc/free

---

Reply via email to