Hi,
HAProxy 2.4-dev16 was released on 2021/04/09. It added 37 new commits
after version 2.4-dev15.
This one is particularly calm, I even hesitated between making it or not.
But there are a few updates that may affect configuration so I figured it
was better to emit a new one.
A large part of the patch is essentially caused by the renaming of a few
atomic ops that were causing some confusion. Now HA_ATOMIC_FOO() will be
a void statement so that if you want to read from the location you use
either HA_ATOMIC_FETCH_FOO() or HA_ATOMIC_FOO_FETCH() (pre- or post-
fetch). The output code shouldn't change however, and given that it was
essentially sed-work, as soon as it started to work I was confident in it.
A few changes in the FD code to clean up that messy fdtab structure cause
another noticeable part of the diff. I obviously managed to break
something once (hence the BUG/MAJOR fix) but now it's OK. Mistakes at this
level are never forgiving anyway, either it fully works or it fully fails.
The nice part that makes me think we're progressively approaching what
could look like the release is that Emeric finally performed the few
changes in the DNS and log code. For the DNS, the TCP servers in the
"resolvers" section do not need to be referred to as "server" anymore,
they are "nameserver" just like the other ones, except that you can
mention "tcp@" in front of their address to force them to be TCP
nameservers. No more configuration mixing there. And for the log servers,
similarly, now you can specify "tcp@" in front of an address on a "log"
statement, and it will automatically create the ring for you with default
settings. Previously it was still required to manually declare the ring, I
found this too cumbersome, and Emeric figured how to handle this.
The rest is essentially small bug fixes and code cleanups from a bunch
of contributors.
Now speaking about the pending stuff I'm still aware of:
- I'd like to rename LIST_ADD/LIST_ADDQ to LIST_INSERT/LIST_APPEND
(or maybe LIST_ADD_HEAD/LIST_ADD_TAIL ?). I've already been trapped
in using LIST_ADD() when I wanted to append and I know the confusion
is easy. That's just a quick "sed" once we know what we want.
- I identified some undesired cache line sharing around some pointers,
that slow down FD operations and possibly other stuff. I see how to
arrange this, it just needs to be done (and tested on MacOS since we
noticed once that section names differ there).
- we've had a recent discussion about the opportunity to import SLZ
and to always enable compression by default using it if no other lib
is specified. I think it could be useful for some users (especially
those for whom memory usage is important). I'll have a look at this,
maybe next week, that's only two files to include.
- regarding the quick discussion two weeks ago about optimization for
modern ARM CPUs, I saw that one solution could be to build using
gcc 10.2+ which outline their atomics into functions. That's ugly
but the performance impact is small (about 3% in my tests), while
it provides a tremendous improvement for many-core machines. But if
we rely on this do this I'll probably add two new CPU entries to
force to use only an old one (v8.0) or only a modern one (v8.2) so
that those who build themselves can shave the last few percent.
- no progress made on the default-path, but we'll have to reread the
issue to figure the best choice. I'd like to see it done for the
release to ease config packaging and deployments.
- I'd like to add a warning when we detect that nbthreads is forced
to a higher value than the number of bound CPUs. It's not the first
time that I see this in a config and the result is catastrophic, so
a warning is deserved. It just needs to be set at the right place.
- the shared memory pools cleanup must be completed before the release,
as the situation is not good for those with a slow malloc() function
at the moment. I know what to do, I just need to stay focused on it.
- the date & time cleanups would be nice to have for the long term and
are not particularly hard to do so better finish them before 2.4.
- Tim sent a patch series to implement URI normalization. That's something
I'd like to see merged if possible, as it may improve security for some
users, and at least improve reliability for others.
- I also noticed Alek's mjson import with a new converter, but didn't
have a look yet. Maybe it will open opportunities for more converters,
that's definitely something which deserves being considered before the
release.
- Amaury has almost finished some work to improve auto-binding on NUMA
systems. Right now using a dual-socket machine is common an painful at
the same time. Having threads enabled by default doesn't improve the
situation there at all due to the slow communication between the CPUs.
In his tests he could confirm significant gains by binding only to the
CPUs of a single socket by default if nothing is specified. I'd like
to see this merged as well. It also opens opportunities for refining
later if needed.
- Christopher has some pending fixes for abortonclose that we'd rather
merge early to observe any possibly undesired side effect.
- I had an idea to experiment with regarding the ability to close idle
frontend connections on reload. It should be relatively easy to do
and could solve a long-lasting problem those with long connections
suffer from. If done in time and if it works well, maybe we could
even consider backporting it.
- and I still would like to add a few macros for the .if/.endif in the
config file, but that's not critical.
As long as we can continue with fixes and low-risk stuff like this, I
think we'll be good for the initial plans of end of May. If we complete
all of this earlier, I'm even fine with anticipating the release a little
bit (but I doubt it).
So far, so good. Have a happy week-end, and don't forget to test and report
your concerns or any improvement you'd notice.
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 :
Christopher Faulet (3):
MINOR: No longer rely on deprecated sample fetches for predefined ACLs
MINOR: acl: Add HTTP_2.0 predefined macro
BUG/MINOR: hlua: Detect end of request when reading data for an HTTP
applet
Emeric Brun (5):
MINOR: server/bind: add support of new prefixes for addresses.
MINOR: log: register config file and line number on log servers.
MEDIUM: log: support tcp or stream addresses on log lines.
BUG/MEDIUM: log: fix config parse error logging on stdout/stderr or any
raw fd
MEDIUM: resolvers: add support of tcp address on nameserver line.
Miroslav Zagorac (1):
MINOR: opentracing: register config file and line number on log servers
Thayne McCombs (1):
BUG/MINOR: tools: fix parsing "us" unit for timers
Tim Duesterhus (7):
MINOR: ist: Add `istappend(struct ist, char)`
MINOR: ist: Add `istshift(struct ist*)`
MINOR: ist: Add `istsplit(struct ist*, char)`
MINOR: ist: Rename istappend() to __istappend()
CLEANUP: htx: Make http_get_stline take a `const struct`
CLEANUP: ist: Remove unused `count` argument from `ist2str*`
CLEANUP: Remove useless malloc() casts
Willy Tarreau (20):
CLEANUP: dev/flags: remove useless test in the stdin number parser
CLEANUP: fd: remove FD_POLL_DATA and FD_POLL_STICKY
MEDIUM: fd: prepare FD_POLL_* to move to bits 8-15
MEDIUM: fd: merge fdtab[].ev and state for FD_EV_* and FD_POLL_* into
state
MINOR: fd: move .linger_risk into fdtab[].state
MINOR: fd: move .cloned into fdtab[].state
MINOR: fd: move .initialized into fdtab[].state
MINOR: fd: move .et_possible into fdtab[].state
MINOR: fd: move .exported into fdtab[].state
MINOR: fd: implement an exclusive syscall bit to remove the ugly "log"
lock
MINOR: cli/show-fd: slightly reorganize the FD status flags
MINOR: atomic/arm64: detect and use builtins for the double-word CAS
CLEANUP: atomic: add an explicit _FETCH variant for add/sub/and/or
CLEANUP: atomic: make all standard add/or/and/sub operations return void
CLEANUP: atomic: add a fetch-and-xxx variant for common operations
CLEANUP: atomic: add HA_ATOMIC_INC/DEC for unit increments
CLEANUP: atomic/tree-wide: replace single increments/decrements with
inc/dec
CLEANUP: atomic: use the __atomic variant of BTS/BTR on modern compilers
MINOR: atomic: implement native BTS/BTR for x86
BUG/MAJOR: fd: switch temp values to uint in fd_stop_both()
---