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