Hi, HAProxy 2.4-dev18 was released on 2021/05/01. It added 51 new commits after version 2.4-dev17.
It seems that it's been quite a calm week in terms of development, with most of the time having been spent on old bugs that are not even *that* serious. Most of them were corner cases occasionally causing peers to be desynchronized on reload. These were rare enough to have remained unnoticed since 1.6 for some of them, but some users reloading extremely frequently managed to trigger them in visible ways and Emeric finally managed to get rid of all of them. A new URI normalizer "percent-decode-unreserved" was added, the "default-path" directive was implemented to chdir into a configurable path for each config file (absolute, relative to the config file, relative to its parent) in order to ease packaging of external files (maps, certs, Lua, errorfiles etc). A new minor but convenient CLI feature was added, the ability to atomically replace a map or ACL. We already had everything available internally, it only had no CLI equivalent, and that was causing annoying limitations to the ingress controller. So it's now possible to create a new version of a file, add values to that specific version, then commit it once complete without leaving any single period with an incomplete map. Code cleanup has continued in various areas (channel, config parser, Lua, HTX), and doc cleanups continued as well in the config manual. I'm almost done with the changes I had in my queue, only the config defines are left pending. I know that Christopher still has a few patches that we need to discuss, and that Amaury is finishing the mechanism to gracefully close idle client connections on reload, so both should be ready next week. I'm thinking about doing a final pass on the "help" text on the CLI to re-align it and make it readable again. We long tried to keep the 80-column format but it's already broken *and* ugly. We can probably push the limit slightly further but make it readable again. Or we may even shorten the help description a bit. Another point that I'd like to clean up is the format of the ALERT/WARNING/ NOTICE messages emitted on stderr. They're followed by numbers that nobody knows what they correspond to. Now I know since I went into the code to see that but I'm sure that one month from now I'll have forgotten. And I'm pretty sure nobody else knows either. Hint: it's the day of year and the time. I was thinking about changing that output format to present only the message level and the PID since the date is usually present in whatever log this lands into. These were added 20 years ago when haproxy was mostly used as a debugging tool in foreground, to ease having a quick glace at a server's console... Something tells me that use cases have changed since then :-) If you're relying on them or if you have some reasonable suggestion about a convenient variant, feel free to propose, but quickly (and I will not go into a bikeshedding discussion). It was also mentioned that for some use cases it could be convenient to have the process' start time and uptime expressed in milliseconds or microseconds. I initially thought about adding an extra field to present these extensions but I'm rolling back on this idea because nothing guarantees they will be dumped at the same moment as the field they extend. So I'm left with 3 possibilities on which I'd like to collect opinions: - add new fields "Uptime_usec", "Start_time_usec" which dump these info as 64-bit integers with the micro-second precision ; - modify existing fields to dump them as floats, at the risk of breaking existing parsers which wouldn't like to see a dot in a value, though Start_time_sec was added in 2.4-dev and can still be changed ; - pass an option to "show info" to automatically append the sub-second precision but leave default format as-is If we'd go for the last option, maybe the approach would instead be to say that the parser supports float values, and that we could over time improve the precision of other measures (like connection rates) so I tend to think it wouldn't be that bad an investment for the long term. Ideas welcome as usual. I think that the following weeks will be mostly focused on doc and final code cleanups (and likely on last-minute fixes, as happens with every version). So unless we meet some last-minute painful bugs that require heavy head-scratching, or we figure we've forgotten something really important, I think it's reasonable to expect a final release any time between ~10 days from now and the end of the month. If you haven't started testing 2.4-dev yet, I'd encourage you to do so now, at least to verify that it matches your use cases and expectations, and still have an opportunity to report any concern before the release. In the mean time, have a nice week-end! 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.4/src/ Git repository : http://git.haproxy.org/git/haproxy.git/ Git Web browsing : http://git.haproxy.org/?p=haproxy.git Changelog : http://www.haproxy.org/download/2.4/src/CHANGELOG Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/ Willy --- Complete changelog : Alex (2): DOC: general: fix white spaces for HTML converter DOC: general: fix example in set-timeout Amaury Denoyelle (6): BUG/MINOR: cpuset: move include guard at the very beginning BUG/MAJOR: fix build on musl with cpu_set_t support BUG/MEDIUM: cpuset: fix build on MacOS MINOR: server: fix doc/trace on lb algo for dynamic server creation REGTESTS: server: fix cli_add_server due to previous trace update BUILD: compiler: do not use already defined __read_mostly on dragonfly Christopher Faulet (12): BUG/MINOR: mux-fcgi: Don't send normalized uri to FCGI application REORG: htx: Inline htx functions to add HTX blocks in a message BUG/MINOR: htx: Preserve HTX flags when draining data from an HTX message MEDIUM: htx: Refactor htx_xfer_blks() to not rely on hdrs_bytes field CLEANUP: htx: Remove unsued hdrs_bytes field from the HTX start-line BUG/MINOR: mux-h2: Don't encroach on the reserve when decoding headers MEDIUM: http-ana: handle read error on server side if waiting for response MINOR: htx: Limit length of headers name/value when a HTX message is dumped BUG/MINOR: applet: Notify the other side if data were consumed by an applet BUG/MINOR: hlua: Don't consume headers when starting an HTTP lua service BUG/MEDIUM: mux-h2: Handle EOM flag when sending a DATA frame with zero-copy CLEANUP: channel: No longer notify the producer in co_skip()/co_htx_skip() Emeric Brun (8): BUG/MEDIUM: peers: initialize resync timer to get an initial full resync BUG/MEDIUM: peers: register last acked value as origin receiving a resync req BUG/MEDIUM: peers: stop considering ack messages teaching a full resync BUG/MEDIUM: peers: reset starting point if peers appears longly disconnected BUG/MEDIUM: peers: reset commitupdate value in new conns BUG/MEDIUM: peers: re-work updates lookup during the sync on the fly BUG/MEDIUM: peers: reset tables stage flags stages on new conns MINOR: peers: add informative flags about resync process for debugging Ilya Shipitsin (1): CLEANUP: assorted typo fixes in the code and comments Remi Tricot-Le Breton (1): BUG/MINOR: ssl: ssl_sock_prepare_ssl_ctx does not return an error code Tim Duesterhus (4): DOC: Fix indentation for `path-strip-dot` normalizer DOC: Fix RFC reference for the percent-to-uppercase normalizer DOC: Add RFC references for the path-strip-dot(dot)? normalizers MINOR: uri_normalizer: Add a `percent-decode-unreserved` normalizer Willy Tarreau (17): CLEANUP: cfgparse: de-uglify early file error handling in readcfgfile() MINOR: config: add a new "default-path" global directive BUG/MEDIUM: time: fix updating of global_now upon clock drift CLEANUP: freq_ctr: make arguments of freq_ctr_total() const CLEANUP: hlua: rename hlua_appctx* appctx to luactx REGTESTS: add minimal CLI "add map" tests DOC: management: move "set var" to the proper place CLEANUP: map: slightly reorder the add map function MINOR: map: get rid of map_add_key_value() MINOR: map: show the current and next pattern version in "show map" MINOR: map/acl: add the possibility to specify the version in "show map/acl" MINOR: pattern: support purging arbitrary ranges of generations MINOR: map/acl: add the possibility to specify the version in "clear map/acl" MINOR: map/acl: add the "prepare map/acl" CLI command MINOR: map/acl: add the "commit map/acl" CLI command MINOR: map/acl: make "add map/acl" support an optional version number CLEANUP: map/cli: properly align the map/acl help ---