Hi,

HAProxy 2.2.11 was released on 2021/03/18. It added 31 new commits
after version 2.2.10.

This release comes few days after the 2.3.7 with the same aim, fix the
resolvers part. In the 2.2.10, some fixes about the cached records
expiration revealed design problems leading to pretty annoying bugs around
the SRV records. Servers based on SRV resolution may enter in a flapping
loop, switching them from UP state to DOWN and UP again at each
resolution. The current design has clearly shown its limitations and it is
already planned to refactor it. However, this will not take part of the
stable releases. Thus several patches were pushed to fix all known issues,
based on the current design. First the detection of cached additional
records was fixed, just like the record expiration loop, fixing this way the
flapping servers bug. The triggering of extra DNS resolutions to overcome
the lack of some additional records in a SRV response was improved, as the
ability to stop them. And finally, the time unit for cached records is now
the millisecond. It should mitigate some edge cases with short-live records
and heavy resolution frequencies. Thanks to the feedback of the community on
the 2.3.7, this all seems to be behind us now.

However note there remains performance issues because of the current design
that may trigger the watchdog if you use huge number of servers in a
server-template declaration. It is hard to say from how many servers a crash
may occur. This will be addressed with the resolvers refactoring. If
possible, some fixes will be backported in stable versions. But it might
required too huge change to be feasible. It is too early to know.

Note also there is still an identified bug in the listeners part, but not
fixed yet. It is a AB/BA deadlock problem that may occur when HAProxy is
stopped. Maciej also reports on the mailing list a 100% CPU usage bug for few
seconds on old processes after releads. Not sure it is the same bug. We are
still investigating.

Here are the list of other fixes :

  * An issue leading to possible infinite loops because of a double locking
    effect in the mt lists was fixed by Olivier. If MT_LIST_TRY_ADDQ()
    macro, it was possible to try to lock twice the same element, making the
    second lock attempt to fail in loop. It happened when there is exactly
    one element in the mt-list and we tried to add it again into the same
    list.

  * The filters part was fixed to be sure the end analyzer (flt_end_analyse)
    is always called for the request and the response, especially when the
    request analysis is finished before the response start.

  * William fixed possible bugs about the listeners. Listeners are not
    necessarily present when the client is an applet (peers, spoe, Lua) and
    we need to be careful when updating counters. It was too hard to say
    whether those could be triggered but there was at least one way
    consisting in adding TCP rules to an SPOE backend.

  * Two bugs in the tcpchecks were fixed. The first one was about the
    agent-checks when mixed with the health-checks. When a agent was setting
    the server state, instead of updating the agent's .health threshold, the
    health-check's one was updated. Thus the agent was competing with the
    health-check and might mark a DOWN server as UP, while the precedence
    should be on the health-checks. The second bug was a double free error
    on invalid tcp-check/http-check rule.

  * Emeric fixed a ref counting bug into the stick-tables. Setting multiple
    http track-scX rules generated never expiring entries. This bug was
    introduced in the 2.2, when the http actions management was refactored.

  * Willy fixed a bug in the frequency counters because they were using the
    thread's own time as the start of the current period leading to
    non-monotonic updates in case of contention. See the commit message for
    details. Now, freq counters rely on a global monotonic time.

Thanks to everyone for this release !

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.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/


---
Complete changelog :
Baptiste Assmann (1):
      MINOR: resolvers: new function find_srvrq_answer_record()

Christopher Faulet (23):
      BUG/MINOR: hlua: Don't strip last non-LWS char in 
hlua_pushstrippedstring()
      BUG/MEDIUM: filters: Set CF_FL_ANALYZE on channels when filters are 
attached
      BUG/MINOR: tcpcheck: Update .health threshold of agent inside an 
agent-check
      BUG/MINOR: proxy/session: Be sure to have a listener to increment its 
counters
      BUG/MINOR: session: Add some forgotten tests on session's listener
      BUG/MINOR: tcpcheck: Fix double free on error path when parsing 
tcp/http-check
      Revert "BUG/MINOR: resolvers: Only renew TTL for SRV records with an 
additional record"
      BUG/MINOR: resolvers: Consider server to have no IP on DNS resolution 
error
      BUG/MINOR: resolvers: Reset server address on DNS error only on status 
change
      BUG/MINOR: resolvers: Unlink DNS resolution to set RMAINT on SRV 
resolution
      BUG/MEDIUM: resolvers: Don't set an address-less server as UP
      BUG/MEDIUM: resolvers: Fix the loop looking for an existing ADD item
      BUG/MINOR; resolvers: Ignore DNS resolution for expired SRV item
      BUG/MEDIUM: resolvers: Trigger a DNS resolution if an ADD item is obsolete
      MINOR: resolvers: Use a function to remove answers attached to a 
resolution
      MINOR: resolvers: Purge answer items when a SRV resolution triggers an 
error
      MINOR: resolvers: Add function to change the srv status based on SRV 
resolution
      MINOR: resolvers: Directly call srvrq_update_srv_state() when possible
      BUG/MEDIUM: resolvers: Don't release resolution from a requester callbacks
      BUG/MEDIUM: resolvers: Skip DNS resolution at startup if SRV resolution 
is set
      MINOR: resolvers: Use milliseconds for cached items in resolver responses
      MINOR: resolvers: Don't try to match immediatly renewed ADD items
      BUG/MINOR: resolvers: Add missing case-insensitive comparisons of DNS 
hostnames

Emeric Brun (1):
      BUG/MEDIUM: stick-tables: fix ref counter in table entry using multiple 
http tracksc.

Olivier Houchard (1):
      BUG/MEDIUM: lists: Avoid an infinite loop in MT_LIST_TRY_ADDQ().

William Lallemand (1):
      BUG/MEDIUM: session: NULL dereference possible when accessing the listener

Willy Tarreau (4):
      BUG/MINOR: ssl: don't truncate the file descriptor to 16 bits in debug 
mode
      CLEANUP: tcp-rules: add missing actions in the tcp-request error message
      MINOR: time: export the global_now variable
      BUG/MINOR: freq_ctr/threads: make use of the last updated global time

--
Christopher Faulet

Reply via email to