Hi,

HAProxy 2.4-dev7 was released on 2021/02/05. It added 153 new commits
after version 2.4-dev6.

This version is quite large for two reasons, first one being that I wanted
to issue it last week but got stuck on an issue that I didn't imagine would
take my week-end and week, and second one because some changes were upheld
by other ones that had to be reworked several times. But eventually all of
this got sorted out and could be merged.

No less than 29 bugs were addressed this time, showing that some significant
activity remains on stabilization, and comforts me in the decision of closing
the merge window at the end of next week so that all those which remain have
the time to be sorted out for the release.

The main updates this time are in the following areas:

  - TCP to HTTP upgrades: these ones were reportedly broken on the last few
    -dev versions (since dev3 or dev4, I don't remember) and have now been
    addressed.

  - HTX: end of the migration to remove the special EOM (end of message)
    block that was causing some difficulties, particularly when CONNECT
    was used in H2, but was also maintaining a certain level of complexity
    in various parts of the muxes. There is a non-null risk of corner case
    issues here, though it has run through extensive testing and even been
    deployed in production and it looks like everything's fine by now. If
    you observe anything strange such as hanging requests or responses, or
    breakage with tunnels (you shouldn't), please report them.

  - Websocket: the WebSocket translation from H2 to H1 is now fully supported
    (RFC8441) as well as H1 to H2. The Extended CONNECT support is also
    advertised so that compatible clients will not need to set up a second
    H1 connection to use websocket anymore.

  - SSL: server-side certificates can now be updated at run time from the
    CLI.

  - Some significant lifting was done to the Prometheus exporter, including
    new fields, better descriptions and some filtering. I've seen quite a
    bunch pass in front of me but do not well understand what it does, all
    that interests me is that some users are happy with these changes so I
    guess they were long awaited :-)

  - health-check/agent-check: some old code that used to be there to force
    the address/port from the server's address while parsing the config had
    some long-tail effects on various parts of the code, making it a nightmare
    to update them dynamically or even from state files. And of course, this
    was just an antique relic not needed anymore some cleaning was done there
    (mostly unused code removal), and will help further consolidation in this
    area in the near future.

  - HTTP: make sure to reject non-compliant status-101 upgrades. We used not
    to check for the upgrade header for example but better stay safe and closer
    to the standard here as we're playing with tunnels. The 101 status code is
    now also rejected internally and externally on any H2 response.

  - The place L7 retries are dealt with changed slightly from the connection
    error handler to an analyser. This must not cause any difference in practice
    except make the code more maintainable and robust. Similarly if you're using
    them and notice a change of behavior, please raise your hand.

  - now we make sure never to emit any payload for bodyless responses (204,
    304, HEAD). In the past such contents could have been produced from inside
    haproxy (Lua for example, maybe http-request return), now the contents will
    be discarded if ever present.

  - debug: "show fd" now reports a bit more information such as the number of
    calls to the registered tasks (useful to detect never-ending loops), local
    and report ports (useful to match against netstat), a few more info about
    the internal handlers and protocol, and an indicator of suspicious state
    (e.g. too many calls, or inconsistent state). This will help bug reporters
    to quickly isolate a few candidates when something looks odd.

  - debug/monitoring: "show profiling" will now report the CPU calls, %usage,
    and latency of each running task since the last time profiling was
    turned on. "show tasks" will enumerate the currently running tasks and
    their counts. Do not abuse by bots, this is expensive. Finally, crashes
    provoked by BUG_ON() statements in DEBUG_STRICT mode will now dump a call
    trace in addition to the error message, hopefully helping developers spot
    certains issues easier.

  - HTTP: chunk size used to be limited to 2 GB because we used to rely on
    31-bit integers at a time where nobody else would support larger values
    either. This was extended to 4 PB to satisfy some extremely rare but
    existing use cases.

And a usual, new regtests (123 running on my machine before any push here),
significant cleanups all over the code, doc and CI improvements. I certainly
have not done justice to those having worked hard on certain parts that
were summed up as a single sentence, but it's also a proof that things are
advancing fast if it's becoming increasingly difficult so say long words
about each of them. Fortunately, contrary to Linus, I can still always
append the short log at the end of my announces for those who want the
details :-)

I'm going to issue 2.3 and 2.2 very soon as well (ideally this evening) to
flush the pipe of pending fixes. Tim reminded me that Debian's last call
for updates before the next release is next week, so I find it important
to have a clean 2.2.9 that users can start with. Also I know that I have
to issue a last 1.6 and close it. I think that in the future I should plan
this for after the feature freeze, it will be easier. This one will wait
two other weeks at least I guess.

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 :
Amaury Denoyelle (20):
      BUG/MINOR: config: fix leak on proxy.conn_src.bind_hdr_name
      MINOR: reg-tests: add http-reuse test
      CLEANUP: srv: fix comment for pool-max-conn
      CLEANUP: backend: remove an obsolete comment on conn_backend_get
      REORG: backend: simplify conn_backend_get
      BUG/MEDIUM: session: only retrieve ready idle conn from session
      BUG/MEDIUM: backend: never reuse a connection for tcp mode
      MINOR: h1: reject websocket handshake if missing key
      MEDIUM: h1: generate WebSocket key on response if needed
      MINOR: mux_h2: define H2_SF_EXT_CONNECT_SENT stream flag
      MEDIUM: h2: parse Extended CONNECT reponse to htx
      MEDIUM: mux_h2: generate Extended CONNECT from htx upgrade
      MEDIUM: h1: add a WebSocket key on handshake if needed
      MEDIUM: mux_h2: generate Extended CONNECT response
      MEDIUM: h2: parse Extended CONNECT request to htx
      MEDIUM: h2: send connect protocol h2 settings
      MINOR: vtc: add test for h1/h2 protocol upgrade translation
      MINOR: vtc: add websocket test
      BUG/MINOR: backend: check available list allocation for reuse
      BUG/MINOR: mux_h2: fix incorrect stat titles

Christopher Faulet (56):
      BUG/MINOR: stats: Continue to fill frontend stats on unimplemented metric
      BUG/MINOR: stats: Init the metric variable when frontend stats are filled
      BUG/MEDIUM: filters/htx: Fix data forwarding when payload length is 
unknown
      BUG/MINOR: stats: Remove a break preventing ST_F_QCUR to be set for 
servers
      BUG/MINOR: stats: Add a break after filling ST_F_MODE field for servers
      MEDIUM: stream-int: Take care of EOS if the SI wake callback function
      MINOR: mux-h1: Try to wake up data layer first before calling its wake 
callback
      MINOR: mux-h1: Wake up H1C after its creation if input buffer is not empty
      MEDIUM: mux-h1: Add ST_READY state for the H1 connections
      MINOR: stream: Add a function to validate TCP to H1 upgrades
      MEDIUM: http-ana: Do nothing in wait-for-request analyzer if not htx
      BUG/MEDIUM: stream: Don't immediatly ack the TCP to H1 upgrades
      BUG/MAJOR: mux-h1: Properly handle TCP to H1 upgrades
      MINOR: htx/http-ana: Save info about Upgrade option in the Connection 
header
      MEDIUM: http-ana: Refuse invalid 101-switching-protocols responses
      BUG/MINOR: h2/mux-h2: Reject 101 responses with a PROTOCOL_ERROR h2s error
      MINOR: mux-h1/mux-fcgi: Don't set TUNNEL mode if payload length is unknown
      MINOR: mux-h1: Split H1C_F_WAIT_OPPOSITE flag to separate input/output 
sides
      MINOR: mux-h2: Add 2 flags to help to properly handle tunnel mode
      MEDIUM: mux-h2: Block client data on server side waiting tunnel 
establishment
      MEDIUM: mux-h2: Close streams when processing data for an aborted tunnel
      MEDIUM: mux-h1: Properly handle tunnel establishments and aborts
      BUG/MAJOR: mux-h1/mux-h2/htx: Fix HTTP tunnel management at the mux level
      MINOR: htx: Rename HTX_FL_EOI flag into HTX_FL_EOM
      REGTESTS: Don't run http_msg_full_on_eom script on the 2.4 anymore
      MINOR: htx: Add a function to know if a block is the only one in a message
      MAJOR: htx: Remove the EOM block type and use HTX_FL_EOM instead
      MINOR: mux-h1: Add a flag on H1 streams with a response known to be 
bodyless
      MEDIUM: mux-h1: Don't emit any payload for bodyless responses
      MINOR: mux-h1: Don't emit C-L and T-E headers for 204 and 1xx responses
      MINOR: mux-h1: Don't add Connection close/keep-alive header for 1xx 
messages
      MINOR: h2/mux-h2: Add flags to notify the response is known to have no 
body
      MEDIUM: mux-h2: Don't emit DATA frame for bodyless responses
      MEDIUM: http-ana: Deal with L7 retries in HTTP analysers
      REGTESTS: Fix required versions for several scripts
      REGTEST: Don't use the websocket to validate http-check
      MINOR: mux-h1/trace: add traces at level ERROR for all kind of errors
      MINOR: mux-fcgi/trace: add traces at level ERROR for all kind of errors
      MINOR: h1: Raise the chunk size limit up to (2^52 - 1)
      MINOR: mux-h1: Remove first useless test on count in h1_process_output()
      BUG/MINOR: stick-table: Always call smp_fetch_src() with a valid arg list
      MINOR: http-fetch: Don't check if argument list is set in sample fetches
      MINOR: http-conv: Don't check if argument list is set in sample converters
      MINOR: sample: Don't check if argument list is set in sample fetches
      MINOR: ssl-sample: Don't check if argument list is set in sample fetches
      MINOR: mux-h2: Don't tests the start-line when sending HEADERS frame
      MINOR: mux-h2: Slightly improve request HEADERS frames sending
      MEDIUM: contrib/prometheus-exporter: Use dynamic labels instead of static 
ones
      MINOR: checks: Add function to get the result code corresponding to a 
status
      DOC: contrib/prometheus-exporter: Add missing metrics in README
      BUG/MINOR: contrib/prometheus-exporter: Add missing label for 
ST_F_HRSP_1XX
      BUG/MINOR: contrib/prometheus-exporter: Restart labels dump at the right 
pos
      MINOR: server: Don't set the check port during the update from a state 
file
      MINOR: dns: Don't set the check port during a server dns resolution
      DOC: server: Add missing params in comment of the server state line 
parsing
      CLEANUP: http-htx: Set buffer area to NULL instead of malloc(0)

Ilya Shipitsin (2):
      BUILD: ssl: guard Client Hello callbacks with HAVE_SSL_CLIENT_HELLO_CB 
macro instead of openssl version
      CLEANUP: assorted typo fixes in the code and comments

Remi Tricot-Le Breton (6):
      MINOR: ssl: Server ssl context prepare function refactoring
      MINOR: ssl: Certificate chain loading refactorization
      MEDIUM: ssl: Load client certificates in a ckch for backend servers
      MEDIUM: ssl: Enable backend certificate hot update
      MINOR: ssl: Remove client_crt member of the server's ssl context
      BUG/MINOR: sock: Unclosed fd in case of connection allocation failure

Tim Duesterhus (5):
      DOC: Improve documentation of the various hdr() fetches
      MINOR: abort() on my_unreachable() when DEBUG_USE_ABORT is set.
      BUILD: Include stdlib.h in compiler.h if DEBUG_USE_ABORT is set
      CI: Fix DEBUG_STRICT definition for Coverity
      CI: Fix the coverity builds

William Dauchy (23):
      MINOR: contrib/prometheus-exporter: better output of Not-a-Number
      CLEANUP: stats: improve field selection for frontend http fields
      MEDIUM: stats: allow to select one field in `stats_fill_be_stats`
      MINOR: contrib/prometheus-exporter: use fill_be_stats for backend dump
      MEDIUM: stats: allow to select one field in `stats_fill_sv_stats`
      MINOR: contrib/prometheus-exporter: use fill_sv_stats for server dump
      MINOR: contrib/prometheus-exporter: declare states for objects
      MAJOR: contrib/prometheus-exporter: move ftd/bkd/srv states to labels
      MAJOR: contrib/prometheus-exporter: move health check status to labels
      MINOR: contrib/prometheus-exporter: improve service status description 
field
      MINOR: stats: improve pending connections description
      MINOR: stats: improve max stats descriptions
      MINOR: contrib/prometheus-exporter: use stats desc when possible
      MINOR: contrib/prometheus-exporter: add uweight field
      MINOR: contrib/prometheus-exporter: add recv logs_logs_total field
      CLEANUP: contrib/prometheus-exporter: remove unused includes
      CLEANUP: contrib/prometheus-exporter: align and reorder fields
      CLEANUP: contrib/prometheus-exporter: remove description in README
      BUG/MINOR: cli: fix set server addr/port coherency with health checks
      MEDIUM: check: remove checkport checkaddr flag
      MEDIUM: server: adding support for check_port in server state
      BUG/MINOR: check: consitent way to set agentaddr
      MEDIUM: check: align agentaddr and agentport behaviour

William Lallemand (14):
      CLEANUP: ssl/cli: rework free in cli_io_handler_commit_cert()
      CLEANUP: ssl: remove SSL_CTX function parameter
      CLEANUP: ssl: make load_srv_{ckchs,cert} match their bind counterpart
      CLEANUP: ssl: remove dead code in ckch_inst_new_load_srv_store()
      BUG/MINOR: ssl: init tmp chunk correctly in ssl_sock_load_sctl_from_file()
      REGTESTS: set_ssl_server_cert.vtc: remove the abort command
      REGTESTS: set_ssl_server_cert.vtc: check the Sha1 Fingerprint
      REGTESTS: set_ssl_server_cert.vtc: check the sha1 from the server
      REGTESTS: set_ssl_server_cert.vtc: set as broken
      REGTESTS: set_ssl_server_cert.vtc: remove SSL caching and set as working
      REGTESTS: set_ssl_server_cert: cleanup the SSL caching option
      BUG/MEDIUM: ssl/cli: abort ssl cert is freeing the old store
      MINOR: ssl/cli: flush the server session cache upon 'commit ssl cert'
      BUILD: Makefile: move REGTESTST_TYPE default setting

Willy Tarreau (27):
      BUG/MEDIUM: listener: do not accept connections faster than we can 
process them
      Revert "BUG/MEDIUM: listener: do not accept connections faster than we 
can process them"
      DOC: management: fix "show resolvers" alphabetical ordering
      MINOR: tools: add print_time_short() to print a condensed duration value
      MINOR: activity: make profiling more manageable
      MINOR: activity: declare a new structure to collect per-function activity
      MEDIUM: tasks/activity: collect per-task statistics when profiling is 
enabled
      MINOR: activity: also report collected tasks stats in "show profiling"
      MINOR: activity: flush scheduler stats on "set profiling tasks on"
      MINOR: activity: add a new "show tasks" command to list currently active 
tasks
      MINOR: listener: export accept_queue_process
      MINOR: session: export session_expire_embryonic()
      MINOR: muxes: export the timeout and shutr task handlers
      MINOR: checks: export a few functions that appear often in trace dumps
      MINOR: peers: export process_peer_sync() to improve traces
      MINOR: stick-tables: export process_table_expire()
      MINOR: listener: export manage_global_listener_queue()
      BUG/MINOR: activity: take care of late wakeups in "show tasks"
      BUG/MEDIUM: ssl: check a connection's status before computing a handshake
      BUG/MINOR: xxhash: make sure armv6 uses memcpy()
      REGTESTS: mark http-check-send.vtc as 2.4-only
      REGTESTS: mark sample_fetches/hashes.vtc as 2.4-only
      BUG/MINOR: ssl: do not try to use early data if not configured
      REGTESTS: unbreak http-check-send.vtc
      MINOR: cli/show_fd: report local and report ports when known
      BUG/MEDIUM: mux-h2: handle remaining read0 cases
      BUG/MEDIUM: mux-h2: do not quit the demux loop before setting END_REACHED

---

Reply via email to