Hi,

HAProxy 2.1.12 was released on 2021/03/18. It added 75 new commits
after version 2.1.11.

The 2.1 branch is planned to be EOL this quarter. There are no longer bug
reports for this specific branch. Thus, it is probably the last 2.1
release. Except if there are critical bugs in next few weeks, no further
release should be expected. You should have no reason to deploy it anymore
in a production environment. Use the 2.2 instead. No specific support should
no longer be expected on the 2.1.

Here is the unsorted list of main fixes for this release :

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

  * 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 happens when there is exactly
    one element in the mt-list and we try 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.

  * Dragan addressed a long-standing issue in the way variables are used as
    arguments to converters. First they were never locked, resulting in bad
    things when accessing shared variables in the "proc" scope. And the
    argument was improperly checked: if it didn't parse it was implicitly a
    variable, but that could die in some circumstances (such as truncated
    base64 values to "base64"). Dragan had no other option but to add
    boot-time config checks that may trigger errors on currently invalid
    configs that silently validate. If it proves to be problematic, we could
    try to replace the error with a warning and use whatever we find
    reliable enough.

  * Willy fixed a thread-safety issue when a stream was killed on a
    hard-stop or when using "shutdown sessions" over the CLI. The streams
    list was not locked. This issue might lead to a crash if an already dead
    stream was shut down. Now, these operations are using thread_isolate()
    to guarantee no other threads are running in same time.

  * Willy als fixed a time wrapping issue in this function, a bug introduced
    with the feature, more than 10 years ago, preventing some health-checks
    to be immediately triggered half of the time.

  * Two bugs were fixed on the H1 multiplexer. The first one is a
    regression. The client side might be blocked at the end of a transaction
    if a "Connection: upgrade" was found in a response other than
    101-Switching-Protocol, preventing the following request to be
    parsed. This happened because of a missing flag on the H1 connection on
    the server side, keeping it attached to the stream. The second one was
    an issue with the responses to CONNECT requests other than 200-Ok. If
    the requested tunnel establishment was not performed by a server, the
    end of the transaction was not properly detected, closing the connection
    on the client side.

  * Willy fixed another very old bug (13 years !) about queue and tarpit
    timeouts picked from the last defaults section during the configuration
    check validity. Looking at the wrong defaults section. It should be the
    one before the evaluated proxy. The worst part of it is that it might
    have randomly worked by accident for some configurations when there was
    a single defaults section, but has certainly caused too short queue
    expirations once another defaults section was added later in the file
    with these explicitly defined.

  * The SPOE filter was improved in multi-threaded mode. The SPOE applets
    are now killed if there are pending connections. This is important to
    not let queued sessions waiting forever. SPOE connections are persistent
    and sticky to a thread. Thus with a low maxconn value, for instance 1,
    some threads might hold all available slots, leaving other threads with
    no free slots.

  * An issue was fixed on the DNS resolvers, about the loading of obsoletes
    server ip/port when a server-state file was used. These information were
    not reset when an server resolution failed or when obsoletes SRV records
    were removed.

  * The server-state-file-name directive was fixed. Since the beginning, in
    contrary to what the documentation said, this directive was not able to
    be used with no parameter. To use the backend name as file name, the
    undocumented parameter "use-backend-name" had to be used instead. Now,
    both modes are supported. Another issue about the server-state file was
    fixed. If the name of local server-state file was too long, the fopen()
    function was called with a NULL file name. Finally, the RMAINT admin
    mode is now ignored when a server state is loaded. Before, when this
    admin mode was set, an error was reported, preventing the server state
    to be loaded.

  * The tracked sessions counter was not atomically incremented, resulting
    in occasional slightly off values.

  * The smp_is_safe() function was fixed. Zero size string samples were not
    systematically considered as unsafe. In some circumstances, it was
    possible to consider such samples as safe by reading one byte after the
    buffer.

  * Address assignment for address-less servers was fixed to be able to
    handle IPv4 and IPv6 by setting the right address family.

  * The set-dst action was buggy. The original port was not set for IPv4
    address. It was a problem for UNIX sockets, the port was not set to 0
    and had an undefined value.

  * The processing of the HTTP originalto action was fixed to only consider
    the destination address. The address family of the source address was
    tested and not the destination one.

  * Jérôme fixed a bug about the "strict-limits" global option when it is
    used in conjunction with master-worker. With this option, when a
    setrlimit fails, HAproxy must always exit. But it was only done when the
    master-worker mode wasn't used. It now works as expected.

  * A memory leak was fixed by Rémi on the error path of the sample
    expression parser and allocation failures are now handled when the
    concat() converter is called.

  * An issue in filters (compression, spoe, etc) could block response
    headers in empty responses with no content-length.

  * There was a risk of temporary CLOSE_WAIT on aborted H2 connections since
    the recent fixes for truncated responses. Note that these ones would
    vanish on timeout anyway, hence it was more annoying than dramatic.

  * The CLI's "abort ssl cert" would purge the old instead of new SSL info.

  * Errors on connections would not prevent SSL handshake from being
    performed, leading to wasted CPU cycles that could sometimes maintain
    the load artificially high during contention.

  * An alignment issue in the XXHash code affecting ARMv6/v7 running in
    32-bit mode on 64-bit kernels was addressed ; it could cause bus errors
    and crashes in 32-bit chroots or containers when using the pattern LRU
    cache.

  * Lua's core.get_info() got broken in previous version due to the missing
     definition of INF_BUILD_INFO in stats.

  * a few other really minor issues were addressed

Thanks everyone for your help and your contributions !

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


---
Complete changelog :
Adis Nezirovic (1):
      BUG/MEDIUM: stats: add missing INF_BUILD_INFO definition

Amaury Denoyelle (2):
      BUG/MINOR: config: fix leak on proxy.conn_src.bind_hdr_name
      BUG/MINOR: backend: hold correctly lock when killing idle conn

Baptiste Assmann (1):
      BUG/MINOR: resolvers: new callback to properly handle SRV record errors

Bertrand Jacquin (2):
      BUG/MINOR: mworker: define _GNU_SOURCE for strsignal()
      BUILD/MINOR: lua: define _GNU_SOURCE for LLONG_MAX

Christopher Faulet (31):
      BUG/MINOR: init: Use a dynamic buffer to set HAPROXY_CFGFILES env variable
      BUG/MEDIUM: filters/htx: Fix data forwarding when payload length is 
unknown
      BUG/MINOR: stick-table: Always call smp_fetch_src() with a valid arg list
      BUG/MINOR: http-ana: Don't increment HTTP error counter on internal errors
      BUG/MEDIUM: mux-h1: Always set CS_FL_EOI for response in MSG_DONE state
      BUG/MINOR: tools: Fix a memory leak on error path in parse_dotted_uints()
      BUG/MINOR: server: Fix server-state-file-name directive
      CLEANUP: deinit: release global and per-proxy server-state variables on 
deinit
      BUG/MINOR: server: Don't call fopen() with server-state filepath set to 
NULL
      BUG/MINOR: server: Remove RMAINT from admin state when loading server 
state
      BUG/MINOR: sample: Always consider zero size string samples as unsafe
      BUG/MINOR: server: Init params before parsing a new server-state line
      BUG/MINOR: server: Be sure to cut the last parsed field of a server-state 
line
      BUG/MEDIUM: mux-h1: Fix handling of responses to CONNECT other than 200-ok
      BUG/MEDIUM: resolvers: Reset server address and port for obselete SRV 
records
      BUG/MEDIUM: resolvers: Reset address for unresolved servers
      BUG/MINOR: mux-h1: Immediately report H1C errors from h1_snd_buf()
      BUG/MINOR: http-ana: Only consider dst address to process originalto 
option
      BUG/MINOR: tcp-act: Don't forget to set the original port for IPv4 
set-dst rule
      BUG/MINOR: connection: Use the client's dst family for adressless servers
      BUG/MEDIUM: spoe: Kill applets if there are pending connections and nbthread 
> 1
      DOC: spoe: Add a note about fragmentation support in HAProxy
      BUG/MINOR: http-ana: Don't increment HTTP error counter on read 
error/timeout
      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: 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: 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: Add missing case-insensitive comparisons of DNS 
hostnames
      MINOR: version: Set the EOL of the 2.1 branch

David CARLIER (1):
      BUG/MINOR: threads: Fixes the number of possible cpus report for Mac.

Dragan Dosen (2):
      BUG/MINOR: sample: secure convs that accept base64 string and var name as 
args
      BUG/MEDIUM: vars: make functions vars_get_by_{name,desc} thread-safe

Emeric Brun (1):
      CLEANUP: channel: fix comment in ci_putblk.

Frédéric Lécaille (2):
      BUG/MINOR: peers: Wrong "new_conn" value for "show peers" CLI command.
      MINOR: contrib: Make the wireshark peers dissector compile for more 
distribs.

Jerome Magnin (1):
      BUG/MINOR: init: enforce strict-limits when using master-worker

Olivier Houchard (3):
      BUG/MEDIUM: dns: Consider the fact that dns answers are case-insensitive
      BUG/MEDIUM: lists: Lock the element while we check if it is in a list.
      BUG/MEDIUM: lists: Avoid an infinite loop in MT_LIST_TRY_ADDQ().

Remi Tricot-Le Breton (1):
      BUG/MINOR: sample: Memory leak of sample_expr structure in case of error

Tim Duesterhus (1):
      BUG/MINOR: mux-h2: Fix typo in scheme adjustment

William Dauchy (2):
      BUG/MINOR: sample: check alloc_trash_chunk return value in concat()
      BUG/MINOR: server: re-align state file fields number

William Lallemand (5):
      BUG/MINOR: ssl: init tmp chunk correctly in ssl_sock_load_sctl_from_file()
      BUG/MEDIUM: ssl/cli: abort ssl cert is freeing the old store
      BUILD: Makefile: move REGTESTST_TYPE default setting
      BUG/MINOR: ssl/cli: potential null pointer dereference in "set ssl cert"
      BUG/MEDIUM: session: NULL dereference possible when accessing the listener

Willy Tarreau (19):
      BUG/MINOR: mux_h2: missing space between "st" and ".flg" in the "show fd" 
helper
      BUG/MEDIUM: mux-h2: fix read0 handling on partial frames
      DOC: management: fix "show resolvers" alphabetical ordering
      BUG/MEDIUM: ssl: check a connection's status before computing a handshake
      BUG/MINOR: xxhash: make sure armv6 uses memcpy()
      BUG/MEDIUM: mux-h2: handle remaining read0 cases
      BUG/MEDIUM: mux-h2: do not quit the demux loop before setting END_REACHED
      BUG/MEDIUM: config: don't pick unset values from last defaults section
      BUG/MINOR: stats: revert the change on ST_CONVDONE
      BUG/MINOR: cfgparse: do not mention "addr:port" as supported on proxy 
lines
      BUG/MINOR: session: atomically increment the tracked sessions counter
      BUG/MINOR: checks: properly handle wrapping time in __health_adjust()
      BUG/MEDIUM: proxy: use thread-safe stream killing on hard-stop
      BUG/MEDIUM: cli/shutdown sessions: make it thread-safe
      BUG/MINOR: proxy: wake up all threads when sending the hard-stop signal
      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