Hi,

HAProxy 2.7.9 was released on 2023/06/07. It added 118 new commits
after version 2.7.8.

This release, as the previous one, is a bit huge. We were busy to release
the 2.8.0. It is high time for us to emit new releases for other stable
versions. The 2.7.9 is the first one of a long series.

In this release, Amaury and Fred continued to stabilize the QUIC stack. It
is now pretty stable, but it is probably better to deploy the 2.8 to use QUIC
in production because it is a LTS version. The 2.7 will still receive bug
fixes, but most of improvements will not be backported. In this release, some
patches fixed the report of the end of the request to upper layer, mainly to
conform to the stream-connector layer refactoring. Few minor bugs on error
paths were also addressed, and comments were added at various places to help
understand some BUG_ON(). Fred also added a number of event counters that
had been missing over the last few troubleshooting sessions.

The SPOE was fixed to limit the number of idle applets on edge cases. On
sporadic bursts, it was possible to systematically start new applets because
the SPOE processing frequency was lower than the messages rate, and this
independently on the number of idle applets. The idle applets tracking was
improved to be able to properly reuse them.
This fix revealed a flaw in the way synchronous frames were handled, leading
to a raise of the message processing latency. To fix this issue, in
synchronous mode, a SPOE applet will now systematically try to send a frame
when it is woken up, except if it is still waiting for a ACK frame after a
receive attempt.
Finally, a crash for engines configured on disabled proxies was fixed. SPOE
engines must not be released for such proxies during the startup because
some resources may be shared with other engines, for instance the ACLs.

Two issues were fixes in the H2 multiplexer:
  * First, we now take care to not refresh the idle timeout when control
    frames are received. Because of this bug, it was possible to keep a
    connection alive by sending periodically control frames, like PING or
    PRIORITY, even after GOAWAY frame was sent. Among other things, it was
    possible to hit this bug during a soft-stop or a reload.
  * Then, the request state at the H2 stream level is now properly reported
    to upper layer when the stream-connector is created. This bug was
    introduced in 2.4. A request may be fully received when the
    stream-connector is created. In this case, all subsequent receives may
    be skipped. It was an issue when an error was also detected because the
    upper layer was not aware of it and the session could be frozen.

The FCGI multiplexer was fixed to be sure to never request more room to the
channel when the mux is waiting for more data. It is especially important to
not do so if the channel buffer is empty. Otherwise, the situation cannot
evolved and the session remains stuck.

A race condition was fixed in the thread isolation that can allow a thread
that was running under isolation to continue running while another one
enters isolation.

The total boot time is now measured. It is used to postpone the startup of
health checks. It is pretty useful for very large configurations taking up
few seconds to start, to not schedule some servers' checks in past. This
also helps to have a better distribution of health-checks when
"spread-checks" option is used. In addition, the spread-checks is also used
at boot time, making the load much smoother from the start.

More actions were added to the "http-after-response" (set-map,
set-log-level, sc-inc-gpc etc)

Finally, as usual, several minor bugs were fixed. The doc was improved. Most
notably, a section about side format was added in the configuration
manual. And the development tools were extended. A script to decode most
flags in the "show sess all" output was added.

If you are running a 2.7, please upgrade. But keep in mind it is not a LTS
version. Now the 2.8.0 was released, it could be good to start to evaluate
it. However keep cool, there is no rush to upgrade. You have 1 year to do
so ;)

Thanks everyone for you help and your contributions !

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/2.7/src/
   Git repository   : https://git.haproxy.org/git/haproxy-2.7.git/
   Git Web browsing : https://git.haproxy.org/?p=haproxy-2.7.git
   Changelog        : https://www.haproxy.org/download/2.7/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


---
Complete changelog :
Aleksandar Lazic (1):
      DOC: configuration: add info about ssl-engine for 2.6

Amaury Denoyelle (47):
      MINOR: quic: use real sending rate measurement
      BUG/MINOR: mux-quic: prevent quic_conn error code to be overwritten
      MINOR: mux-quic: add trace event for local error
      MINOR: mux-quic: wake up after recv only if avail data
      MINOR: mux-quic: adjust local error API
      MINOR: mux-quic: report local error on stream endpoint asap
      MINOR: mux-quic: close connection asap on local error
      MINOR: quic: add format argument for "show quic"
      MINOR: quic: implement oneline format for "show quic"
      BUG/MINOR: mux-quic: fix transport VS app CONNECTION_CLOSE
      BUG/MEDIUM: mux-quic: wakeup tasklet to close on error
      BUG/MINOR: mux-quic: do not prevent shutw on error
      BUG/MINOR: mux-quic: do not free frame already released by quic-conn
      BUG/MINOR: mux-quic: no need to subscribe for detach streams
      MINOR: mux-quic: add traces for stream wake
      MINOR: mux-quic: do not send STREAM frames if already subscribe
      MINOR: mux-quic: factorize send subscribing
      MINOR: mux-quic: simplify return path of qc_send()
      MEDIUM: quic: streamline error notification
      MEDIUM: mux-quic: adjust transport layer error handling
      MINOR: htx: add function to set EOM reliably
      MINOR: mux-quic: remove dedicated function to handle standalone FIN
      BUG/MINOR: mux-quic: properly handle buf alloc failure
      BUG/MINOR: mux-quic: handle properly recv ncbuf alloc failure
      BUG/MINOR: quic: do not alloc buf count on alloc failure
      BUG/MINOR: mux-quic: differentiate failure on qc_stream_desc alloc
      BUG/MINOR: mux-quic: free task on qc_init() app ops failure
      BUG/MINOR: mux-quic: handle properly Tx buf exhaustion
      BUG/MINOR: h3: missing goto on buf alloc failure
      MINOR: mux-quic: add trace to stream rcv_buf operation
      MINOR: mux-quic: properly report end-of-stream on recv
      MINOR: mux-quic: uninline qc_attach_sc()
      BUG/MEDIUM: mux-quic: fix EOI for request without payload
      CLEANUP: mux-quic/h3: complete BUG_ON with comments
      MINOR: quic: remove return val of quic_aead_iv_build()
      MINOR: quic: use WARN_ON for encrypt failures
      BUG/MINOR: quic: handle Tx packet allocation failure properly
      MINOR: quic: fix alignment of oneline show quic
      MINOR: mux-quic: set both EOI EOS for stream fin
      MINOR: mux-quic: only set EOS on RESET_STREAM recv
      MINOR: mux-quic: report error on stream-endpoint earlier
      CLEANUP: mux-quic: remove unneeded fields in qcc
      MINOR: mux-quic: remove nb_streams from qcc
      MINOR: quic: fix stats naming for flow control BLOCKED frames
      BUG/MEDIUM: mux-quic: only set EOI on FIN
      CLEANUP: mux-quic: rename functions for mux_ops
      CLEANUP: mux-quic: rename internal functions

Artur Pydo (1):
      DOC: quic: fix misspelled tune.quic.socket-owner

Aurelien DARRAGON (9):
      BUG/MINOR: proxy: missing free in free_proxy for redirect rules
      MINOR: proxy: add http_free_redirect_rule() function
      BUG/MINOR: http_rules: fix errors paths in http_parse_redirect_rule()
      BUG/MINOR: errors: handle malloc failure in usermsgs_put()
      BUG/MINOR: log: fix memory error handling in parse_logsrv()
      BUG/MINOR: hlua: unsafe hlua_lua2smp() usage
      DOC: config: fix jwt_verify() example using var()
      BUG/MINOR: cfgparse-tcp: leak when re-declaring interface from bind line
      BUG/MINOR: proxy: add missing interface bind free in free_proxy

Christopher Faulet (16):
      BUG/MEDIUM: spoe: Don't start new applet if there are enough idle ones
      BUG/MINOR: resolvers: Use sc_need_room() to wait more room when dumping 
stats
      BUILD: mjson: Fix warning about unused variables
      MINOR: spoe: Don't stop disabled proxies
      BUG/MEDIUM: filters: Don't deinit filters for disabled proxies during 
startup
      MINOR: http-rules: Add missing actions in http-after-response ruleset
      BUG/MEDIUM: mux-fcgi: Don't request more room if mux is waiting for more 
data
      BUG/MINOR: tcp-rules: Don't shortened the inspect-delay when EOI is set
      REGTESTS: log: Reduce response inspect-delay for last_rule.vtc
      DOC: config: Clarify conditions to shorten the inspect-delay for TCP rules
      REGTESTS: log: Reduce again response inspect-delay for last_rule.vtc
      MINOR: mux-h2: Set H2_SF_ES_RCVD flag when decoding the HEADERS frame
      MINOR: mux-h2: Add a function to propagate termination flags from h2s to 
SE
      BUG/MEDIUM: mux-h2: Propagate termination flags when frontend SC is 
created
      DOC: config: Fix bind/server/peer documentation in the peers section
      BUG/MINOR: spoe: Only skip sending new frame after a receive attempt

Daniel Epperson (1):
      DOC: add size format section to manual

Frédéric Lécaille (18):
      CLEANUP: quic: No more used q_buf structure
      CLEANUP: quic: Rename several <buf> variables in quic_frame.(c|h)
      CLEANUP: quic: Typo fix for quic_connection_id pool
      BUG/MINOR: quic: Wrong key update cipher context initialization for 
encryption
      BUG/MINOR: quic: Possible crash when dumping version information
      BUG/MINOR: quic: Buggy acknowlegments of acknowlegments function
      BUG/MINOR: quic: Wrong redispatch for external data on connection socket
      MINOR: quic: Add low level traces (addresses, DCID)
      BUG/MINOR: quic: Wrong token length check (quic_generate_retry_token())
      BUG/MINOR: quic: Missing Retry token length on receipt
      MINOR: quic: Align "show quic" command help information
      CLEANUP: quic: Indentation fix quic_rx_pkt_retrieve_conn()
      CLEANUP: quic: Useless tests in qc_rx_pkt_handle()
      MINOR: quic: Add some counters at QUIC connection level
      MINOR: quic: Add a counter for sent packets
      MINOR: quic: Add QUIC connection statistical counters values to "show 
quic"
      BUG/MINOR: quic: Possible crash when SSL session init fails
      CONTRIB: Add vi file extensions to .gitignore

Ilia Shipitsin (2):
      CI: switch to Fastly CDN to download LibreSSL
      BUILD: ssl: switch LibreSSL to Fastly CDN

Ilya Shipitsin (1):
      CI: drop Fedora m32 pipeline in favour of cross matrix

Mariam John (1):
      DOC/MINOR: config: Fix typo in description for `ssl_bc` in 
configuration.txt

William Lallemand (2):
      BUG/MINOR: ssl/sample: x509_v_err_str converter output when not found
      BUILD: ssl: buggy -Werror=dangling-pointer since gcc 13.0

Willy Tarreau (19):
      DEV: haring: automatically disable DEBUG_STRICT
      DEV: haring: update readme to suggest using the same build options for 
haring
      BUG/MINOR: debug: fix incorrect profiling status reporting in show threads
      BUG/MINOR: debug: do not emit empty lines in thread dumps
      BUILD: debug: do not check the isolated_thread variable in non-threaded 
builds
      BUILD: quic: fix build warning when threads are disabled
      BUILD: thread: implement thread_harmless_end_sig() for threadless builds
      BUG/MEDIUM: mux-h2: make sure control frames do not refresh the idle 
timeout
      MINOR: clock: measure the total boot time
      BUG/MINOR: checks: postpone the startup of health checks by the boot time
      MINOR: checks: make sure spread-checks is used also at boot time
      DEV: flags: add a script to decode most flags in the "show sess all" 
output
      DEV: flags: add missing stream flags to show-sess-to-flags
      DEV: flags/show-sess-to-flags: only retrieve hex digits from hex fields
      DEV: flags/show-sess-to-flags: add support for color output
      SCRIPTS: publish-release: update the umask to keep group write access
      BUG/MEDIUM: threads: fix a tiny race in thread_isolate()
      BUG/MINOR: mux-h2: refresh the idle_timer when the mux is empty
      MINOR: quic/cli: clarify the "show quic" help message

--
Christopher Faulet

Reply via email to