Hi,

HAProxy 2.2.1 was released on 2020/07/23. It added 29 new commits
after version 2.2.0.

This version addresses a small number of issues that were raised after the
release, a few of which are important enough to warrant an upgrade for all
2.2 users:
  - two crashes that can happen in the scheduler when using threads and
    resolvers, reported by Tim in issue 758. This is a regression that I
    introduced late in the development cycle while trying to address
    scheduling issues. It only affects multi-threaded tasks (seems to be
    resolvers only) whose timeout can be updated based on new activity.

  - the do-resolve action was not thread-safe (issue #236) and would
    instantly segfault under load. In addition it was also able to leak
    memory even when not using threads (issue #222). These ones were
    already reported a year ago and affect 2.0 and possibly even as far
    as 1.7.

  - actions, sample-fetches, converters taking a single optional argument
    would not accept to be called with empty parenthesis anymore, as Luke
    reported in issue #763. This was a 2.2 regression coming as a side
    effect of the rewrite of the arg parser to support commas and quotes.
    The problem is that it doesn't cause an error, it sees an empty
    argument of the same type as the optional one, so an integer would be
    zero, a string would be empty, etc. It can possibly cause non-obvious
    issues depending on the use cases.

  - a bug in the way the channel code deals with shutdowns, causing endless
    loops in Lua when peeking data from a channel (issue #744). The bug
    itself is not a regression, but it wouldn't trigger on older versions
    for scheduling reasons.

  - an end of stream signaling in HTX that causes MSG_MORE to be emitted
    even on the final response from an FCGI server since 2.2 (issue #756).
    The fix is not the prettiest we've done but it will be enough for the
    time it takes to improve this area, and possibly backport something
    better in the future.

  - idle-connections: FastCGI and H2 connections marked "private" were
    mistakenly added to the shared list of available ones when they ought
    not to.

  - a bug on HTTP/1 protocol upgrades in tunnel mode that broke WebSocket,
    and also affects 2.1 post-2.1.7 (issue #737).

  - target servers in ring buffers, and peers declared using the "server"
    keyword were not resolved if using an FQDN (issue #759). These would
    simply cause a silent connection error.


A few other bugs were already present in older versions:
  - a small memory leak in fcgi-app that affects 2.1 and newer (issue #750).

  - a missing memory barrier in thread-safe lists that manages to cause
    crashes in the scheduler only on ARM Cortex A53 (and probably other
    weakly ordered CPUs).

  - logs: mixing "sampled" log servers with non-sampled ones would cause
    the latter to lose logs due to an unexpected "static" variable retaining
    this state during the config parsing.

  - Ilya addressed an FD leak that could happen with state files containing
    errors (issues #660 and #738). This was apparently introduced in 2.1.

The rest is less important. There remains one bug on Fcgi, by which haproxy
would mistakenly decode the query string while it shouldn't (issue #769, also
affects 2.1). This will be addressed shortly.

Overall, it's not that bad at all. There definitely are some scary ones,
but not that many. I hope we'll have a bit of rest to restart to work on
addressing certain issues at the root instead of just their visible effect,
but the current trend seems encouraging.

In the mean time, every user of 2.2.0 should really upgrade to 2.2.1 to fix
these ones. I think we'll soon emit another 2.1 given that quite some fixes
have been accumulating since 2.1.7.

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

Willy
---
Complete changelog :
Christopher Faulet (12):
      BUG/MEDIUM: mux-h2: Don't add private connections in available connection 
list
      BUG/MEDIUM: mux-fcgi: Don't add private connections in available 
connection list
      BUG/MEDIUM: mux-h1: Continue to process request when switching in tunnel 
mode
      BUG/MINOR: mux-fcgi: Handle empty STDERR record
      BUG/MINOR: mux-fcgi: Set conn state to RECORD_P when skipping the record 
padding
      BUG/MINOR: mux-fcgi: Set flags on the right stream field for empty 
FCGI_STDOUT
      BUG/MEDIUM: channel: Be aware of SHUTW_NOW flag when output data are 
peeked
      BUG/MAJOR: dns: Make the do-resolve action thread-safe
      BUG/MEDIUM: dns: Release answer items when a DNS resolution is freed
      MEDIUM: htx: Add a flag on a HTX message when no more data are expected
      BUG/MEDIUM: stream-int: Don't set MSG_MORE flag if no more data are 
expected
      BUG/MEDIUM: http-ana: Only set CF_EXPECT_MORE flag on data filtering

Emeric Brun (2):
      BUG/MEDIUM: log: issue mixing sampled to not sampled log servers.
      BUG/MEDIUM: resolve: fix init resolving for ring and peers section.

Harris Kaufmann (1):
      BUG/MEDIUM: fcgi-app: fix memory leak in fcgi_flt_http_headers

Ilya Shipitsin (1):
      BUG/MEDIUM: server: resolve state file handle leak on reload

Lukas Tribus (1):
      DOC: ssl: req_ssl_sni needs implicit TLS

Tim Duesterhus (2):
      BUG/MINOR: sample: Free str.area in smp_check_const_bool
      BUG/MINOR: sample: Free str.area in smp_check_const_meth

Willy Tarreau (10):
      BUG/MEDIUM: lists: add missing store barrier on MT_LIST_BEHEAD()
      BUG/MEDIUM: lists: add missing store barrier in MT_LIST_ADD/MT_LIST_ADDQ
      CONTRIB: da: fix memory leak in dummy function da_atlas_open()
      BUG/MEDIUM: server: fix possibly uninitialized state file on close
      BUILD: config: address build warning on raspbian+rpi4
      BUG/MAJOR: tasks: make sure to always lock the shared wait queue if needed
      BUILD: config: fix again bugs gcc warnings on calloc
      BUG/MEDIUM: arg: empty args list must be dropped
      BUG/MAJOR: tasks: don't requeue global tasks into the local queue
      BUG/MINOR: htx: add two missing HTX_FL_EOI and remove an unexpected one

---

Reply via email to