Hi,
HAProxy 2.2-dev2 was released on 2020/02/07. It added 115 new commits
after version 2.2-dev1.
Over the last two weeks, 36 bugs and a few build warnings were addressed.
On the features front, I mainly noted these :
- CLI: Adis added support for multiple filters on the "show table"
output. I haven't tried it yet but it looks promising as I guess I'll
be able to simplify a few anti-abuse scripts here and there that
heavily rely on grep.
- connection: the ongoing code cleanup work was continued. It should
normally be harmless (famous last words). Once this is complete, I
intend to write some doc about it so that we know this tricky area
better in the future.
- HTTP: Christopher implemented about all the things we've been debating
over the last 5 years around the "return" directive. Now we can forge
a response at any instant based on a status code, an error file, a
body from an argument string, a body from a log-format argument, a
body from a file, a body processed from a log-format stored in a file
(effectively making it a response template), a set of headers, and I
think that's about all. We may have to remind people more often that
haproxy is not a file server, but at least it will be extremely
convenient for some to be able to return rich reject pages or tailored
sets of headers for rate shaping based on 503+retry for example. This
should allow some of us to finally remove the dirty hacks consisting
in using an backend with a specific 503 error file, or something similar
based on a deny rule, just for the sake of delivering a robots, favicon,
or any ".well-known" content. Responses remain limited to the size of a
buffer, and I'm not willing to see this change for now.
- HTTP: Christopher also added a new "http-after-response" ruleset to
manipulate headers after the final response is sent. This is mainly
used to append headers after redirects or haproxy's error responses.
The main use case definitely concerns HSTS, but given that all regular
actions were implemented, one could also think about using this to
delete some Server headers for example.
- Lua: it is now possible to directly build a response to be injected
from an HTTP action by passing a reply object to txn:done(). In the
past it used to be only possible from services. This means that some
new HTTP actions could first be implemented in Lua for the time it
takes to get a broad consensus on them, before doing them natively.
- SSL: William brought significant startup time savings when using
large amounts of certificates thanks to a new option indicating
what extensions to look for. By default, for backwards compatibility
we look for ".ocsp", ".sctl", ".issuer" and all cert types extensions.
But when you know exactly what you're using and know it's pointless
to check for the ones above, you can now explicitly tell haproxy not
to look them up, and all these extra syscalls start to account for
real when you have 100k certs.
- Lua: Tim added options to prepend the lookup path for Lua modules.
- a bunch of dead code cleanups and/or minor fixes by Ilya and
William Dauchy (I noticed a few other ones arrived since the release).
- splicing: a thread-local pool of recently used pipes was added to
improve cache locality and eliminate locking on allocation, resulting
in ~5-6% performance increase on spliced traffic.
- scheduler: the scheduler now becomes latency aware. I was particularly
irritated by seeing some pathological cases in which a "show info" on
the CLI could take tens of seconds on a machine saturated under high
traffic rates just because I/O tasks requeue themselves and find some
new data available. Now we have 3 latency classes and tasks are placed
there based on their behavior. The result is that now even on a machine
saturating 16 threads at 100% forwarding 90 Gbps of traffic, the CLI
responds in 70ms and not one minute anymore. And the small objects now
experience a much lower latency on mixed traffic.
Last, a few potentially user-visible changes:
- you'll now get an error if an ACL is called "or" since you'll never be
able to match it, as the "or" word is taken by the expression parser.
It was backported but will only warn in stable versions.
- too large error files that fill the rewrite reserved area will warn
you at load time, as they are potentially incompatible with
http-after-reponse rules.
- the number of connections reported in the logs output of a quitting
proxy now clearly indicates that the value is the cumulated conns
and not the active conns. I wouldn't be surprised to learn that some
people parse this output and got it wrong as I did a few times :-)
This branch is starting to be interesting, I'll deploy it on haproxy.org
and see if it allows me to simplify some of the configuration. Let's
continue to get good stuff like this merged till end of March, and let's
try to get dev3 in two weeks.
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
Sources : http://www.haproxy.org/download/2.2/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.2/src/CHANGELOG
Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/
Willy
---
Complete changelog :
Adis Nezirovic (3):
MEDIUM: cli: Allow multiple filter entries for "show table"
BUG/MINOR: cli: Missing arg offset for filter data values.
MINOR: cli: Report location of errors or any extra data for "show table"
Christopher Faulet (30):
BUG/MINOR: http-ana: Increment the backend counters on the backend
BUG/MINOR: stream: Be sure to have a listener to increment its counters
BUG/MINOR: http-rules: Always init log-format expr for common HTTP actions
BUG/MINOR: http-act: Use the good message to test strict rewritting mode
MINOR: global: Set default tune.maxrewrite value during global structure
init
MINOR: http-rules: Set SF_ERR_PRXCOND termination flag when a header
rewrite fails
MINOR: http-htx: Emit a warning if an error file runs over the buffer's
reserve
MINOR: htx: Add a function to append an HTX message to another one
MINOR: htx/channel: Add a function to copy an HTX message in a channel's
buffer
BUG/MINOR: http-ana: Don't overwrite outgoing data when an error is
reported
MINOR: dns: Dynamically allocate dns options to reduce the act_rule size
MINOR: dns: Add function to release memory allocated for a do-resolve rule
BUG/MINOR: http-ana: Reset HTX first index when HAPRoxy sends a response
BUG/MINOR: http-ana: Set HTX_FL_PROXY_RESP flag if a server perform a
redirect
MINOR: http-rules: Add a flag on redirect rules to know the rule direction
MINOR: http-rules: Handle the rule direction when a redirect is evaluated
MINOR: http-ana: Rely on http_reply_and_close() to handle server error
MINOR: http-ana: Add a function for forward internal responses
MINOR: http-ana/http-rules: Use dedicated function to forward internal
responses
MEDIUM: http: Add a ruleset evaluated on all responses just before
forwarding
MEDIUM: http-rules: Add the return action to HTTP rules
MEDIUM: http-rules: Support extra headers for HTTP return actions
CLEANUP: lua: Remove consistency check for sample fetches and actions
BUG/MINOR: http-ana: Increment failed_resp counters on invalid response
MINOR: lua: Get the action return code on the stack when an action
finishes
MINOR: lua: Create the global 'act' object to register all action return
codes
MINOR: lua: Add act:wake_time() function to set a timeout when an action
yields
MEDIUM: lua: Add ability for actions to intercept HTTP messages
REGTESTS: Add reg tests for the HTTP return action
REGTESTS: Add a reg test for http-after-response rulesets
Emmanuel Hocdet (2):
BUG/MINOR: ssl: ssl_sock_load_pem_into_ckch is not consistent
BUG/MINOR: ssl/cli: ocsp_issuer must be set w/ "set ssl cert"
Frédéric Lécaille (1):
BUG/MINOR: ssl: Possible memleak when allowing the 0RTT data buffer.
Ilya Shipitsin (2):
BUILD: CI: temporarily mark openssl-1.0.2 as allowed failure
BUILD: CI: move cygwin builds to Github Actions
Jerome Magnin (1):
DOC: word converter ignores delimiters at the start or end of input string
Olivier Houchard (16):
BUG/MEDIUM: netscaler: Don't forget to allocate storage for conn->src/dst.
MEDIUM: streams: Always create a conn_stream in connect_server().
MEDIUM: connections: Get ride of the xprt_done callback.
BUG/MEDIUM: connections: Set CO_FL_CONNECTED in conn_complete_session().
BUG/MEDIUM: 0rtt: Only consider the SSL handshake.
BUG/MEDIUM: streams: Move the conn_stream allocation outside #IF
USE_OPENSSL.
MINOR: ssl: Remove dead code.
BUG/MEDIUM: ssl: Don't forget to free ctx->ssl on failure.
BUG/MEDIUM: stream: Don't install the mux in back_handle_st_con().
MEDIUM: streams: Don't close the connection in back_handle_st_con().
MEDIUM: streams: Don't close the connection in back_handle_st_rdy().
BUG/MEDIUM: connections: Don't forget to unlock when killing a connection.
BUG/MEDIUM: memory_pool: Update the seq number in pool_flush().
MINOR: memory: Only init the pool spinlock once.
BUG/MEDIUM: memory: Add a rwlock before freeing memory.
BUG/MAJOR: memory: Don't forget to unlock the rwlock if the pool is empty.
Tim Duesterhus (7):
MINOR: lua: Add hlua_prepend_path function
MINOR: lua: Add lua-prepend-path configuration option
MINOR: lua: Add HLUA_PREPEND_C?PATH build option
CLEANUP: peers: Remove unused static function `free_dcache`
CLEANUP: peers: Remove unused static function `free_dcache_tx`
MINOR: acl: Warn when an ACL is named 'or'
BUG/MINOR: acl: Fix type of log message when an acl is named 'or'
William Dauchy (3):
BUG/MINOR: connection: fix ip6 dst_port copy in make_proxy_line_v2
BUG/MINOR: dns: allow 63 char in hostname
MINOR: proxy: clarify number of connections log when stopping
William Lallemand (7):
BUG/MINOR: ssl/cli: free the previous ckch content once a PEM is loaded
BUG/MINOR: ssl: increment issuer refcount if in chain
BUG/MINOR: ssl: memory leak w/ the ocsp_issuer
BUG/MINOR: ssl: typo in previous patch
BUG/MINOR: ssl/cli: fix unused variable with openssl < 1.0.2
MINOR: ssl: ssl-load-extra-files configure loading of files
BUG/MINOR: ssl: clear the SSL errors on DH loading failure
Willy Tarreau (43):
BUILD: stick-table: fix build errors introduced by last stick-table change
CLEANUP: changelog: remove the duplicate entry for 2.2-dev1
CLEANUP: backend: remove useless test for inexistent connection
CLEANUP: backend: shut another false null-deref in back_handle_st_con()
CLEANUP: stats: shut up a wrong null-deref warning from gcc 9.2
MEDIUM: connection: remove CO_FL_CONNECTED and only rely on CO_FL_WAIT_*
MINOR: stream-int: always report received shutdowns
MINOR: connection: remove CO_FL_SSL_WAIT_HS from CO_FL_HANDSHAKE
MEDIUM: connection: use CO_FL_WAIT_XPRT more consistently than
L4/L6/HANDSHAKE
MINOR: connection: remove checks for CO_FL_HANDSHAKE before I/O
MINOR: connection: do not check for CO_FL_SOCK_RD_SH too early
MINOR: connection: don't check for CO_FL_SOCK_WR_SH too early in
handshakes
MINOR: raw-sock: always check for CO_FL_SOCK_WR_SH before sending
MINOR: connection: remove some unneeded checks for CO_FL_SOCK_WR_SH
BUG/MINOR: stktable: report the current proxy name in error messages
BUG/MEDIUM: mux-h2: make sure we don't emit TE headers with anything but
"trailers"
BUILD: cfgparse: silence a bogus gcc warning on 32-bit machines
REGTESTS: make the set_ssl_cert test require version 2.2
BUILD: CI: disable slow regtests on Travis
BUG/MINOR: tcpchecks: fix the connect() flags regarding delayed ack
MEDIUM: raw-sock: remove obsolete calls to fd_{cant,cond,done}_{send,recv}
MEDIUM: pipe/thread: reduce the locking overhead
MEDIUM: pipe/thread: maintain a per-thread local cache of recently used
pipes
BUG/MEDIUM: pipe/thread: fix atomicity of pipe counters
MINOR: tasks: move the list walking code to its own function
MEDIUM: tasks: implement 3 different tasklet classes with their own queues
MEDIUM: tasks: automatically requeue into the bulk queue an already
running tasklet
OPTIM: task: refine task classes default CPU bandwidth ratios
MINOR: task: permanently flag tasklets waking themselves up
MINOR: task: make sched->current also reflect tasklets
MINOR: task: detect self-wakeups on tl==sched->current instead of
TASK_RUNNING
OPTIM: task: readjust CPU bandwidth distribution since last update
MINOR: task: don't set TASK_RUNNING on tasklets
SCRIPTS: add a new "backport" script to simplify long series of backports
BUG/MINOR: ssl: we may only ignore the first 64 errors
SCRIPTS: use /usr/bin/env bash instead of /bin/bash for scripts
CLEANUP: hpack: remove a redundant test in the decoder
CONTRIB: debug: add missing flags SF_HTX and SF_MUX
CONTRIB: debug: add the possibility to decode the value as certain types
only
CONTRIB: debug: support reporting multiple values at once
BUILD: lua: silence a warning on systems where longjmp is not marked as
noreturn
CONTRIB: debug: also support reading values from stdin
SCRIPTS: backport: use short revs and resolve the initial commit
---