Hi,

HAProxy 2.0.30 was released on 2022/12/09. It added 72 new commits
after version 2.0.29.

This release flushes the pipe of all pending fixes:

 * A major issue on sitck-tables were fixed about a possible crash if server
   name indexing is used to perform stickiness when the server is an applet.
   This is typically what happens when a "stick-store" rule is present in a
   backend featuring a "stats" directive. And at the end, to fix the bug,
   such rules must simply be ignored when the server is an applet.

 * A race condition on some global tasks was fixed. The stick-table
   expiration task and the listeners management task were concerned. These
   tasks may run on any thread. Both set their expiration date to
   TICK_ETERNITY. On the other hand, these task may be queued or scheduled
   from anywhere. The race was when the both happened at same time.  Indeed
   it is forbidden to queue a task with no expiration date. To prevent any
   issue, a locking mechanism is now used.

 * It was possible to trigger the watchdog because of an extreme contention
   on the proxy's lock while the libc was in malloc()/free(). It was mainly
   due to the errors capture. A call to free() was under the lock with no
   special reason. The object is now released outside of the proxy's lock.

 * The protocol matching for HTTP/1.X is now strict. Non-HTTP/1.X protocols
   are now rejected by default. This can be relaxed by adding
   "accept-invalid-http-request" option.

 * An issue during the argument parsing when sample fetches or converters
   are called from lua was fixed to avoid crashes on failure.

 * An old bug in the H2 mux may cause spurious stream resets when uploading
   and downloading at the same time from the same stream, due to the window
   update frames having to be delayed when the output is full, and sent
   later after the stream ID was reset. Those using POST to servers might
   have experienced such occasional issues and might want to check for any
   improvement there. This was reported in issue #1830 and diagnosed by
   David le Blanc.

 * Reloading peers could compete on the local one and slow down or block the
   replication.

 * Reloading peers could interrupt a resync in progress if the retry timer
   triggered before the end.

 * In peers, messages about unkown table was not properly ignored. Those
   messages are now silently ignored and the upper layer continue the
   processing as it is done for any valid messages

 * It was possible to crash HAProxy by defining multiple bind lines in a
   peers section. An error is now reported during configuration parsing.

 * Pause or resume a proxy from lua code could lead to some race because
   these operations were performed outside the proxy's lock. To fix the
   issue and prevent any trouble, the proxy's API was slightly refactored to
   be sure the proxy's lock is always acquired by low-level functions.

 * There was an undesired sharing of data between default-servers that could
   lead to double-frees concretized by crashes when checking the config.
   This was reported in issue #1804 by Fabiano Nunes.

 * There was a bug in the SPOE. In sync or pipelining modes, an unhealthy
   SPOA could led HAProxy to create a huge number of applets to process
   queued messages, slowing down all processing.

 * An internal error was reported when loadbalancing on source IP address
   was impossible. It could happens with SPOE applets or with clients
   connected to HAProxy via a unix socket. Now, when this happens, a
   fallback to round-robin is performed.

 * Headers case adjustment in H1 is now available for TCP proxies. It was
   an issue for HTTP health-checks on backend side or for TCP connections
   upgraded to HTTP on frontend side.

 * A bug in the "method" sample fetch could lead to a crash if it was used
   in logs for errors triggered at the mux level. This sample requires a
   stream, witch does not yet exist when an early error is reported by a
   mux. Now, a non-matching is returned in this case.

 * A memory leak was fixed when some TXN variables were defined from a
   tcp-request ruleset for an HTTP session. Indeed, in this case, these
   variables were lost because of an extra list initialization during the
   HTTP transaction creation.

 * Characters escaping process in log messages was not correctly processing
   strings coming from sample fetches truncating the output string.

  * The DNS resolution is now ignored for disabled proxies preventing some
    crashes.

 * A 60s delay could be experienced after stopping HAProxy. This was
   happening when a signal was received before entering the poller and
   without any activity on the process. In mworker mode, if a worker exited
   and the SIGCHLD signal was delivered at the right time to the master,
   this one could be stuck for 60s. The timeout is now set to 0 in this
   specific case.

Thanks everyone for your 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.0/src/
   Git repository   : https://git.haproxy.org/git/haproxy-2.0.git/
   Git Web browsing : https://git.haproxy.org/?p=haproxy-2.0.git
   Changelog        : https://www.haproxy.org/download/2.0/src/CHANGELOG
   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 :
Aurelien DARRAGON (4):
      BUG/MEDIUM: proxy: ensure pause_proxy() and resume_proxy() own PROXY_LOCK
      BUG/MINOR: log: improper behavior when escaping log data
      DOC: configuration: missing 'if' in tcp-request content example
      BUG/MINOR: http_ana/txn: don't re-initialize txn and req var lists

Christopher Faulet (24):
      REGTESTS: abortonclose: Fix some race conditions
      REGTESTS: abortonclose: Add a barrier to not mix up log messages
      REGTESTS: http_request_buffer: Increase client timeout to wait "slow" 
clients
      BUG/MINOR: http-ana: Set method to HTTP_METH_OTHER when an HTTP txn is 
created
      BUG/MINOR: http-fetch: Use integer value when possible in "method" sample 
fetch
      BUG/MINOR: backend: Fallback on RR algo if balance on source is impossible
      MINOR: peers: Use a dedicated reconnect timeout when stopping the local 
peer
      BUG/MEDIUM: peers: limit reconnect attempts of the old process on reload
      BUG/MINOR: peers: Use right channel flag to consider the peer as connected
      MINOR: server: Constify source server to copy its settings
      REORG: server: Export srv_settings_cpy() function
      BUG/MEDIUM: proxy: Perform a custom copy for default server settings
      BUG/MEDIUM: spoe: Properly update streams waiting for a ACK in async mode
      BUG/MEDIUM: peers: Add connect and server timeut to peers proxy
      BUG/MEDIUM: peers: Don't use resync timer when local resync is in progress
      BUG/MEDIUM: peers: Don't start resync on reload if local peer is not 
up-to-date
      REGTESTS: http_request_buffer: Add a barrier to not mix up log messages
      BUG/MINOR: h1: Support headers case adjustment for TCP proxies
      BUILD: cfgparse: Fix GCC warning about a variable used after realloc
      BUG/MINOR: http-fetch: Update method after a prefetch in smp_fetch_meth()
      BUG/MAJOR: stick-table: don't process store-response rules for applets
      BUG/MEDIUM: listener: Fix race condition when updating the global mngmt 
task
      BUILD: peers: Remove unused variables
      Revert "CI: determine actual LibreSSL version dynamically"

David Carlier (1):
      BUILD: fix build warning on solaris based systems with __maybe_unused.

Emeric Brun (5):
      BUG/MEDIUM: peers: fix segfault using multiple bind on peers sections
      BUG/MEDIUM: peers: prevent unitialized multiple listeners on peers section
      DOC: peers: clarify when entry expiration date is renewed.
      DOC: peers: fix port number and addresses on new peers section format
      BUG/MEDIUM: peers: messages about unkown tables not correctly ignored

Ilya Shipitsin (2):
      CI: determine actual LibreSSL version dynamically
      CI: add monthly gcc cross compile jobs

Matthias Wirth (1):
      BUG/MINOR: signals/poller: ensure wakeup from signals

Olivier Houchard (1):
      BUG/MEDIUM: lua: handle stick table implicit arguments right.

Thayne McCombs (1):
      BUG/MEDIUM: sample: Fix adjusting size in word converter

Tim Duesterhus (3):
      BUG/MEDIUM: http: Properly reject non-HTTP/1.x protocols
      CI: Replace the deprecated `::set-output` command by writing to 
$GITHUB_OUTPUT in matrix.py
      CI: Replace the deprecated `::set-output` command by writing to 
$GITHUB_OUTPUT in workflow definition

William Lallemand (8):
      BUG/MINOR: peers: fix possible NULL dereferences at config parsing
      BUG/MINOR: sockpair: wrong return value for fd_send_uxst()
      BUG/MINOR: ssl: free the fields in srv->ssl_ctx
      BUG/MINOR: resolvers: return the correct value in 
resolvers_finalize_config()
      DOC: configuration: do-resolve doesn't work with a port in the string
      BUG/MINOR: signals/poller: set the poller timeout to 0 when there are 
signals
      BUILD: fix compilation for OpenSSL-3.0.0-alpha17
      DOC: management: add forgotten "show startup-logs"

Willy Tarreau (22):
      BUG/MINOR: peers: fix error reporting of "bind" lines
      SCRIPTS: add make-releases-json to recreate a releases.json file in 
download dirs
      SCRIPTS: make publish-release try to launch make-releases-json
      DOC: peers: indicate that some server settings are not usable
      BUG/MINOR: conn_stream: do not confirm a connection from the frontend path
      BUILD: compiler: implement unreachable for older compilers too
      BUG/MINOR: server: do not enable DNS resolution on disabled proxies
      BUG/MINOR: peers/config: always fill the bind_conf's argument
      BUILD: http: silence an uninitialized warning affecting gcc-5
      BUG/MEDIUM: mux-h2: do not fiddle with ->dsi to indicate demux is idle
      BUG/MEDIUM: captures: free() an error capture out of the proxy lock
      SCRIPTS: announce-release: update some URLs to https
      BUILD: http_fetch: silence an uninitiialized warning with gcc-4/5/6 at -Os
      BUG/MAJOR: stick-tables: do not try to index a server name for applets
      BUG/MEDIUM: stick-table: fix a race condition when updating the 
expiration task
      CI: emit the compiler's version in the build reports
      BUILD: listener: fix build warning on global_listener_rwlock without 
threads
      DOC: config: provide some configuration hints for "http-reuse"
      DOC: config: clarify the fact that SNI should not be used in HTTP 
scenarios
      DOC: config: explain how default matching method for ACL works
      DOC: config: clarify the fact that "retries" is not just for connections
      DOC: config: clarify the -m dir and -m dom pattern matching methods

--
Christopher Faulet

Reply via email to