Hi,
HAProxy 2.5-dev12 was released on 2021/11/02. It added 65 new commits
after version 2.5-dev11. It comes a bit later than I would have liked
but we've been struggling on another remaining bug in the resolvers
that required some fair amount of analysis to knock down, and I didn't
feel like releasing saying "resolvers still bogus".
Overall, I'm observing the expected cool down in the complexity and risk
of the stuff that's getting merged, so thanks for that! Most of them were
bug fixes, build fixes, doc updates and code cleanups. Aside these, I'm
seeing:
- merge of the work on splitting the src/dst info from the connection so
there there's finally one set of each per layer (connection, session,
stream). Thus now an http-request set-src will no longer mistakenly
affect all other streams sharing the same connection, but only the
request itself. However if done at the TCP session or connection level,
all streams will see the update. With this also come a few new sample
fetch functions to retrieve source and destinations at various levels
(e.g. fc_src for the connection) so that it's now possible to retrieve
the original source address of an incoming proxy that connects using
the proxy protocol. The "set-src" and "set-src-port" actions were also
added to the "tcp-request content" rulesets.
- the "tcp-request connection" rules now support "set-var-fmt" and
"set-var", which can act on "proc." and "sess." scoped variables.
- merged the one-liner output type change of the var() sample fetch
function to stop pretending to be a string when it isn't (and fixed
our faulty regtest accordingly, given that we weren't immune to the
risk of bugs ourselves)
- added a few output filtering options to halog to extract query string
parameters and HTTP headers
- httpclient: finish the streaming part for the body: it's now possible
to send a body larger than an internal buffer, and the Lua binding also
supports it. More methods are also supported now by default (GET, HEAD,
PUT, POST, DELETE), and an immediate error can now be generated when
the request couldn't be generated. I personally think that we now have
everything needed to much more easily interact with external HTTP-based
services or APIs.
Regarding the remaining stuff I'm aware of:
- I've reviewed Björn's current MPTCP patches which need to be polished,
but it looks like it's simply a matter of rebasing them, adding commit
messages and writing a few extra lines of doc, which is basically all
that kept me from merging almost half of it that's just pure cleanups.
I'm obviously not going to pressure him, but what I've seen left is so
trivial now that I will probably not object to a late merge.
- Jaroslaw's interest in having one set of map_*() converters return the
matching key instead of a value is quite interesting, and could turn
out to be 10 isolated lines, or could be trickier, I really don't know.
I think it's worth checking at least. We're getting close to a release
but on the other hand, if that's really trivial, why not have it ?
- Jaroslaw's leastconn improvements raised some difficulties between
allocating inside locks (not desirable especially in such high-speed
areas) or using a lot more RAM (not desirable either). We've discussed
ways to improve this but these add some complexity to the solution,
so for me it's getting too tight now and I'd rather postpone to 2.6.
- William is checking what's required to always let the master process
enter the wait mode after a successful start and not just after a failed
one. Similarly if it ends up being simple enough, better have it now so
that we stop eating twice the amount of RAM once for all.
- Christopher is currently trying to make a unified converter from Tim's
normalize-uri actions, so that we could us it in a safe way (e.g. path
normalization) and apply it to other areas (query string parameters,
HTTP headers etc). If that works fine, I'd rather mark the normalize-uri
one deprecated since it was introduced late in 2.4 so as to warn users
early enough. No rush on this one anyway.
- Amaury has some patches to address the WebSocket-over-H2 fun on the
server side (the problem of reusing connections which possibly do not
support it, and to tag them appropriately). We're going to review this
tomorrow, and a part of it will have to be backported anyway.
- a few low-hanging fruits like adding some options to some converters
etc.
And I think that's approximately all for this release. Some issues that have
kept us busy for some time are now resolved. SSL renegotiation was finally
caused by the muxes: H2 was fixed by accident and H1 was fixed in this
release, a case of CPU loop was just addressed, and resolvers are hopefully
well-behaved now.
If all goes well, we could have dev13 this week-end with the pending stuff
from above, leave another week of tests and final fixes, and maybe issue
2.5-final on the week-end, after. If we face issues, that might easily
postpone by two more weeks as there's the HAProxyConf on 16-17, and I don't
expect much bug-chasing from those finishing to prepare their talks, which
would be quite fair :-)
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.5/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.5/src/CHANGELOG
Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/
Willy
---
Complete changelog :
Anubhav (1):
DOC: Typo fixed "it" should be "is"
Christopher Faulet (32):
CLEANUP: lua: Remove any ambiguities about lua txn execution context flags
CLEANUP: connection: No longer export make_proxy_line_v1/v2 functions
CLEANUP: tools: Use const address for get_net_port() and get_host_port()
CLEANUP: lua: Use a const address to retrieve info about a connection
MINOR: connection: Add function to get src/dst without updating the
connection
MINOR: session: Add src and dst addresses to the session
MINOR: stream-int: Add src and dst addresses to the stream-interface
MINOR: frontend: Rely on client src and dst addresses at stream level
MINOR: log: Rely on client addresses at the appropriate level to log
messages
MINOR: session: Rely on client source address at session level to log
error
MINOR: http-ana: Rely on addresses at stream level to set xff and xot
headers
MINOR: http-fetch: Rely on addresses at stream level in HTTP sample
fetches
MINOR: mux-fcgi: Rely on client addresses at stream level to set default
params
MEDIUM: tcp-sample: Rely on addresses at the appropriate level in tcp
samples
MEDIUM: connection: Rely on addresses at stream level to make proxy line
MEDIUM: backend: Rely on addresses at stream level to init server
connection
MEDIUM: connection: Assign session addresses when PROXY line is received
MEDIUM: connection: Assign session addresses when NetScaler CIP proto is
parsed
MEDIUM: tcp-act: Set addresses at the apprioriate level in set-(src/dst)
actions
MINOR: tcp-act: Add set-src/set-src-port for "tcp-request content" rules
DOC: config: Fix alphabetical order of fc_* samples
MINOR: tcp-sample: Add samples to get original info about client
connection
REGTESTS: Add script to test client src/dst manipulation at different
levels
MINOR: stream: Use backend stream-interface dst address instead of
target_addr
BUILD: log: Fix compilation without SSL support
BUG/MINOR: mux-h1: Save shutdown mode if the shutdown is delayed
BUG/MEDIUM: mux-h1: Perform a connection shutdown when the h1c is released
BUG/MEDIUM: resolvers: Don't recursively perform requester unlink
BUG/MEDIUM: http-ana: Drain request data waiting the tarpit timeout
expiration
BUG/MEDIUM: stream-int: Block reads if channel cannot receive more data
BUG/MEDIUM: resolvers: Track api calls with a counter to free resolutions
MINOR: stream: Improve dump of bogus streams
David Carlier (2):
BUILD: atomic: fix build on mac/arm64
BUILD/MINOR: cpuset freebsd build fix
Jaroslaw Rzeszótko (1):
MINOR: vars: add "set-var" for "tcp-request connection" rules.
John Roesler (1):
DOC/peers: some grammar fixes for peers 2.1 spec
Remi Tricot-Le Breton (2):
BUG/MINOR: http: Authorization value can have multiple spaces after the
scheme
BUG/MINOR: http: http_auth_bearer fetch does not work on custom header
name
Tim Duesterhus (10):
MINOR: halog: Add -qry parameter allowing to preserve the query string in
-uX
CLEANUP: jwt: Remove the use of a trash buffer in jwt_jwsverify_hmac()
CLEANUP: jwt: Remove the use of a trash buffer in
jwt_jwsverify_rsa_ecdsa()
DEV: coccinelle: Add realloc_leak.cocci
CLEANUP: hlua: Remove obsolete branch in `hlua_alloc()`
DOC: halog: Move the `-qry` parameter into the correct section in help
text
MINOR: halog: Rename -qry to -query
CLEANUP: halog: Use consistent indentation in help()
BUG/MINOR: halog: Add missing newlines in die() messages
MINOR: halog: Add support for extracting captures using -hdr
William Lallemand (8):
MINOR: httpclient: support payload within a buffer
MINOR: httpclient/lua: support more HTTP methods
MINOR: httpclient/lua: return an error when it can't generate the request
MINOR: httpclient: request streaming with a callback
MINOR: httpclient/lua: handle the streaming into the lua applet
REGTESTS: lua: test httpclient with body streaming
BUG/MINOR: httpclient/lua: misplaced luaL_buffinit()
BUG/MINOR: httpclient: use a placeholder value for Host header
Willy Tarreau (7):
DEBUG: protocol: yell loudly during registration of invalid sock_domain
MINOR: protocols: add a new protocol type selector
MINOR: protocols: make use of the protocol type to select the protocol
MINOR: protocols: replace protocol_by_family() with protocol_lookup()
BUILD: atomic: prefer __atomic_compare_exchange_n() for __ha_cas_dw()
MINOR: atomic: remove the memcpy() call and dependency on string.h
MEDIUM: vars: make the var() sample fetch function really return type ANY
vishnu (1):
BUG/MEDIUM: lua: fix invalid return types in hlua_http_msg_get_body
---