Hi,

HAProxy 1.9.3 was released on 2019/01/29. It added 35 new commits after
version 1.9.2.

It mainly addresses a few stability issues affecting versions up to 1.9.2.
Several of these issues are only reproducible when using H2 to connect to
the servers and are caused by various incorrect or insufficient error
handling when facing failures during connection reuse. Another issue was
a side effect of the fixes on mailers (which still use the checks
infrastructure) that resulted in a crash when using agent-check. A last
minor fix for the checks was made to address a timeout issue, and checks
are expected to be in a better shape now.

Another issue was reported on the way our SSL stack deals with KeyUpdate
messages that are part of TLS 1.3. These were identified as renegotiation
attempts and were dropped, causing some communication issues with Chrome
when they attempted to make use of them. Apparently we were not the only
ones so it's a side effect of reusing a feature which has long had to be
disabled everywhere. Now the issue was addressed, and it's important that
distros update their packages to get this part fixed when they use OpenSSL
1.1.1 so that we don't leave early bugs on the net which prevent security
features from reliably being used. This patch was also backported into the
1.8 branch and will be present in the next 1.8 release.

On the less important issues, some better control for stream limits were
enforced on outgoing H2 connections. We used to observe batches of errors
when the server was refusing too high stream IDs after it sent a GOAWAY,
now we can react faster. In addition, in order to avoid this situation at
all (as Nginx wants to close by default after 1000 streams over the same
connection), we've added a "max-reuse" server parameter indicating how
many times a connection may be reused. For example setting this to 990
is enough to always stop reusing a connection before nginx sends its
GOAWAY.

The H2 mux was not respecting the reserve in HTX mode, leading to the
impossibility to manipulate headers and to some request or response
errors. Some other small issues affecting the reserve size in HTX were
addressed, though some of them are now a bit foggy to me.

That's about all for this release. I still have some pending fixes that
I preferred to delay a bit and that I'll backport for the next 1.9 :
  - make outgoing connection reuse failure fail more gracefully and
    support a retry ; we have everything for this, it just required a
    few changes in the connection setup code that I didn't feel bold
    enough to integrate into this one.

  - H2 will check that the content-length header matches the amount of
    DATA (standards compliance)

  - H2 currently don't use the server's advertised MAX_CONCURRENT_STREAMS
    setting and only uses its global one, but it's not much complicated
    to address. I expect that we may face some of these sooner or later.

  - there's this ":authority" header field missing from H2 requests that
    we should apparently add when upgrading H1 to H2.

  - regarding the reported issue of some large objects transfers over H2
    from some specific clients being truncated during reloads, I brought
    the issue to the IETF HTTP working group. Some gave me examples showing
    my initial idea of watching WINDOW_UPDATE messages will not work. However
    I managed to design another solution that I will experiment with soon
    in 2.0-dev. If it ends up working fine enough, we'll backport it to 1.9.

Last, if you feel like you'd like to contribute but don't know where to
start, please have a look at the issue tracker (see the URL below), have
a look at the bugs and if you feel like you can work on one of them, just
mention it in the issue and propose a patch.

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
   Sources          : http://www.haproxy.org/download/1.9/src/
   Git repository   : http://git.haproxy.org/git/haproxy-1.9.git/
   Git Web browsing : http://git.haproxy.org/?p=haproxy-1.9.git
   Changelog        : http://www.haproxy.org/download/1.9/src/CHANGELOG
   Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/

Willy
---
Complete changelog :
Christopher Faulet (4):
      BUG/MINOR: check: Wake the check task if the check is finished in 
wake_srv_chk()
      BUG/MINOR: proto-htx: Return an error if all headers cannot be received 
at once
      BUG/MEDIUM: mux-h2/htx: Respect the channel's reserve
      BUG/MINOR: mux-h1: Apply the reserve on the channel's buffer only

Dirkjan Bussink (1):
      BUG/MEDIUM: ssl: Fix handling of TLS 1.3 KeyUpdate messages

Jérôme Magnin (1):
      BUG/MINOR: server: don't always trust srv_check_health when loading a 
server state

Miroslav Zagorac (1):
      BUG/MINOR: spoe: corrected fragmentation string size

Olivier Houchard (3):
      BUG/MEDIUM: servers: Make assign_tproxy_address work when ALPN is set.
      BUG/MEDIUM: connections: Add the CO_FL_CONNECTED flag if a send succeeded.
      BUG/MEDIUM: servers: Attempt to reuse an unfinished connection on retry.

PiBa-NL (1):
      REGTEST: checks basic stats webpage functionality

Uman Shahzad (1):
      BUG/MINOR: startup: certain goto paths in init_pollers fail to free

Willy Tarreau (23):
      BUG/MEDIUM: checks: fix recent regression on agent-check making it crash
      DOC: mention the effect of nf_conntrack_tcp_loose on src/dst
      BUG/MINOR: mux-h1: avoid copying output over itself in zero-copy
      BUG/MAJOR: mux-h2: don't destroy the stream on failed allocation in 
h2_snd_buf()
      BUG/MEDIUM: backend: also remove from idle list muxes that have no more 
room
      BUG/MEDIUM: mux-h2: properly abort on trailers decoding errors
      MINOR: h2: declare new sets of frame types
      BUG/MINOR: mux-h2: CONTINUATION in closed state must always return GOAWAY
      BUG/MINOR: mux-h2: headers-type frames in HREM are always a connection 
error
      BUG/MINOR: mux-h2: make it possible to set the error code on an already 
closed stream
      BUG/MINOR: hpack: return a compression error on invalid table size updates
      MINOR: server: make sure pool-max-conn is >= -1
      BUG/MINOR: stream: take care of synchronous errors when trying to send
      BUG/MINOR: mux-h2: always check the stream ID limit in h2_avail_streams()
      BUG/MINOR: mux-h2: refuse to allocate a stream with too high an ID
      BUG/MEDIUM: backend: never try to attach to a mux having no more stream 
available
      MINOR: server: add a max-reuse parameter
      MINOR: mux-h2: always consider a server's max-reuse parameter
      DOC: nbthread is no longer experimental.
      BUG/MINOR: listener: always fill the source address for accepted 
socketpairs
      BUG/MINOR: mux-h2: do not report available outgoing streams after GOAWAY
      BUG/MINOR: task: fix possibly missed event in inter-thread wakeups
      BUG/MEDIUM: backend: always call si_detach_endpoint() on async connection 
failure

---

Reply via email to