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