Hi,

HAProxy 2.6-dev5 was released on 2022/04/09. It added 120 new commits
after version 2.6-dev4.

It's visible that we're progressively getting closer to the end of a
development cycle, updates are arriving faster and cleanups and small
improvements are becoming more numerous.

Aside the usual bug fixes, this version brings:
  - a new converter, add_item(), developed by Nikola Sale, which eases
    the concatenation of values in headers by automatically prepending
    delimiters only when the previous value and the added value are not
    empty. It can typically cut in half the number of "set-var" rules
    in complex configs.

  - httpclient improvements and fixes: now the HTTP client can correctly
    buffer a request body and enable L7 retries to transparently deal
    with connection errors and torn down keep-alive connections. A final
    touch on automatic name resolution is currently being worked on to
    complete the whole thing.

  - QUIC updates: QUIC was deployed a week ago on https://haproxy.org/
    and even if there's little HTTPS traffic there, it already helped
    identify minor issues, most of which were addressed. One of them
    limits the performance due to the way buffers are handled down the
    transmission chain, but this is currently being addressed. I was
    very pleased to see that it worked without trouble for 6.5 days,
    after which it was restarted for an update. Those interested in
    duplicating the experiment can read the latest news on haproxy.org
    where the main steps are explained. If there's some demand, maybe
    we could write a more detailed howto, but for now I'd rather see
    the experts spending their time on polishing the code ;-)

  - Opentracing updates: in 2.5 we had to disable the use of variables
    between the plugin and the haproxy core because the code was relying
    on an original misfeature of the variables which was that they
    would never disappear after being created, and this misfeature was
    fixed in 2.5, breaking that part of Opentracing. Miroslav finally
    found the time to address this and rework it in an elegant way so
    that the module is fully functional again. It is technically possible
    to backport his work to 2.5 if there is some demand but at this stage
    I prefer not to, until there's demand (i.e. some 2.4 users who are
    blocked on 2.4 only because of this). If you're using opentracing
    and are missing this in 2.5, please voice in. And similarly if you're
    using it in 2.5 and would prefer this not to change, feel free to
    voice in as well.

  - the automatic frontend connection closing mechanism on reload that
    was brought into 2.5 caused some concerns to some users, leading
    to an option to disable it. Now there's a new global setting,
    "close-spread-time", which can be used to indicate that the closure
    of idle connections should be randomly spread over that interval, so
    that reconnecting clients don't all rush at the same time on the new
    process. This applies both to passive close ("connection: close" on
    responses), and to active close of idle connections. For best
    efficiency, the interval should obviously be shorter than the one
    used in "hard-stop-after" if any. We'll also see how to extend the
    mechanism to allow never to close at all as there's also some demand
    for this.

  - the "ca-file" SSL directive now supports a special "@system-ca" name
    that requests that the CA provided by default on the operating system
    are used. This is convenient for outgoing connections to servers that
    use standard certificates emitted by standard CAs. This way you know
    that you don't have to maintain your own copy of these CAs and that
    your system updates will bring you fresh new ones from time to time.

  - for those who have to produce or parse configs (typically ingress
    controllers, and the dataplane API), a new set of debug options on
    the boot command line was added, "-dK", to dump registered keywords
    per category (config, actions, CLI, samples, etc). This applies
    after the config loads so that it's also possible to enumerate
    keywords brought by a Lua module. If there's no config it will work
    by just running a config check on an empty file or /dev/null. The
    goal essentially is to compare outputs between versions to detect
    syntax changes. Note that many old keywords (those parsed by strcmp)
    are not listed.

Regarding what's left to be done before the release, as I mentioned
above, host name resolution for the httpclient will be nice and seems
within reach. There's still quite some QUIC work to be done (improved
buffer management, improved traces, some reliability fixes, cleanups).
There are some pending reworks of some of relation between streams,
connections and applets, to make them more straightforward and help to
avoid a number of bugs in the future, as well as to help fixing issues.
I'll recheck with Björn if we can finish the MPTCP patchset (it was
almost finished for 2.5, but none of us had time to polish it), and
we need to see with Christopher if we can unblock the stream creation
on a different thread so that Maciej can optimize the thread usage on
peers. There were a few tunables I wanted to add for H2, maybe they'll
be added late in the cycle.

Aside this, with Cyril and Tim we've been working on integrating the
doc generation in the CI so that it's automated. That's why there's a
new "docs" repository on the github account. No need to go there for
now, that's not finished but we're working on it, and will announce
the updated URLs once it looks complete.

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.6/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.6/src/CHANGELOG
   Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/

Willy
---
Complete changelog :
Aleksandar Lazic (1):
      DOC: remove double blanks in configuration.txt

Amaury Denoyelle (23):
      BUG/MEDIUM: quic: do not use qcs from quic_stream on ACK parsing
      MINOR: mux-quic: return qcs instance from qcc_get_qcs
      MINOR: mux-quic: reorganize qcs free
      MINOR: mux-quic: define release app-ops
      BUG/MINOR: h3: release resources on close
      BUG/MINOR: mux-quic: ensure to free all qcs on MUX release
      CLEANUP: quic: complete comment on qcs_try_to_consume
      MINOR: quic: implement stream descriptor for transport layer
      MEDIUM: quic: move transport fields from qcs to qc_conn_stream
      MEDIUM: mux-quic: remove qcs tree node
      BUG/MEDIUM: quic: ensure quic-conn survives to the MUX
      CLEANUP: quic: use static qualifer on quic_close
      CLEANUP: mux-quic: remove unused QC_CF_CC_RECV
      BUG/MINOR: fix memleak on quic-conn streams cleaning
      MINOR: mux-quic: factorize conn-stream attach
      MINOR: mux-quic: adjust timeout to accelerate closing
      MINOR: mux-quic: define is_active app-ops
      MINOR: mux-quic: centralize send operations in qc_send
      MEDIUM: mux-quic: report CO_FL_ERROR on send
      MEDIUM: mux-quic: report errors on conn-streams
      MEDIUM: quic: report closing state for the MUX
      CLEANUP: mux-quic: remove uneeded TODO in qc_detach
      BUG/MEDIUM: mux-quic: properly release conn-stream on detach

Christopher Faulet (11):
      BUG/MEDIUM: mux-fcgi: Properly handle return value of headers/trailers 
parsing
      BUG/MEDIUM: mux-h1: Properly detect full buffer cases during message 
parsing
      BUG/MINOR: log: Initialize the list element when allocating a new log 
server
      BUG/MINOR: fcgi-app: Don't add C-L header on response to HEAD requests
      BUG/MEDIUM: stats: Be sure to never set EOM flag on an empty HTX message
      BUG/MEDIUM: hlua: Don't set EOM flag on an empty HTX message in HTTP 
applet
      BUG/MEDIUM: promex: Be sure to never set EOM flag on an empty HTX message
      BUG/MEDIUM: mux-h1: Set outgoing message to DONE when payload length is 
reached
      BUG/MINOR: http_client: Don't add input data on an empty request buffer
      BUG/MEDIUM: http-conv: Fix url_enc() to not crush const samples
      BUG/MEDIUM: http-act: Don't replace URI if path is not found or invalid

Frédéric Lécaille (24):
      BUG/MEDIUM: quic: Possible crash in ha_quic_set_encryption_secrets()
      CLEANUP: quic: Remove all atomic operations on quic_conn struct
      CLEANUP: quic: Remove all atomic operations on packet number spaces
      MEDIUM: quic: Send ACK frames asap
      BUG/MINOR: quic: Missing probing packets when coalescing
      BUG/MINOR: quic: Discard Initial packet number space only one time
      MINOR: quic: Do not display any timer value from process_timer()
      BUG/MINOR: quic: Do not probe from an already probing packet number space
      BUG/MINOR: quic: Non duplicated frames upon fast retransmission
      BUG/MINOR: quic: Too much prepared retransmissions due to 
anti-amplification
      MINOR: quic: Useless call to SSL_CTX_set_default_verify_paths()
      MINOR: quic: Add traces about list of frames
      BUG/MINOR: h3: Missing wait event struct field initialization
      BUG/MINOR: quic: QUIC TLS secrets memory leak
      BUG/MINOR: quic: Missing ACK range deallocations
      BUG/MINOR: quic: Missing TX packet deallocations
      MINOR: quic: Add draining connection state.
      MINOR: quic: Add closing connection state
      BUG/MEDIUM: quic: Possible crash from quic_free_arngs()
      MINOR: quic_tls: Add reusable cipher contexts to QUIC TLS contexts
      MINOR: quic_tls: Stop hardcoding cipher IV lengths
      CLEANUP: quic: Do not set any cipher/group from ssl_quic_initial_ctx()
      MINOR: quic: Add short packet key phase bit values to traces
      MINOR: quic_tls: Make key update use of reusable cipher contexts

Ilya Shipitsin (1):
      CI: github actions: update OpenSSL to 3.0.2

Lukas Tribus (1):
      DOC: reflect H2 timeout changes

Miroslav Zagorac (16):
      BUG/MINOR: opentracing: setting the return value in function 
flt_ot_var_set()
      BUG/BUILD: opentracing: fixed OT_DEFINE variable setting
      EXAMPLES: opentracing: refined shell scripts for testing filter 
performance
      DOC: opentracing: corrected comments in function descriptions
      CLEANUP: opentracing: removed unused function flt_ot_var_unset()
      CLEANUP: opentracing: removed unused function flt_ot_var_get()
      Revert "MINOR: opentracing: change the scope of the variable 'ot.uuid' 
from 'sess' to 'txn'"
      MINOR: opentracing: only takes the variables lock on shared entries
      CLEANUP: opentracing: added flt_ot_smp_init() function
      CLEANUP: opentracing: added variable to store variable length
      MINOR: opentracing: improved normalization of context variable names
      DEBUG: opentracing: show return values of all functions in the debug 
output
      CLEANUP: opentracing: added FLT_OT_PARSE_INVALID_enum enum
      DEBUG: opentracing: display the contents of the err variable after setting
      MAJOR: opentracing: reenable usage of vars to transmit opentracing context
      Revert "BUILD: opentracing: display warning in case of using OT_USE_VARS 
at compile time"

Nikola Sale (1):
      MINOR: sample: converter: Add add_item convertor

Remi Tricot-Le Breton (2):
      BUG/MINOR: ssl/cli: Remove empty lines from CLI output
      MEDIUM: global: Add a "close-spread-time" option to spread soft-stop on 
time window

William Lallemand (18):
      MEDIUM: httpclient/lua: be stricter with httpclient parameters
      MINOR: ssl: split the cert commit io handler
      MINOR: ssl: move the cert_exts and the CERT_TYPE enum
      MINOR: ssl: simplify the certificate extensions array
      MINOR: ssl: export ckch_inst_rebuild()
      MINOR: ssl: add "crt" in the cert_exts array
      MINOR: ssl/lua: CertCache.set() allows to update an SSL certificate file
      BUILD: ssl/lua: CacheCert needs OpenSSL
      DOC: lua: CertCache class documentation
      DOC: management: add missing dot in 9.4.1
      MEDIUM: ssl: allow loading of a directory with the ca-file directive
      BUG/MINOR: ssl: continue upon error when opening a directory w/ ca-file
      MINOR: ssl: ca-file @system-ca loads the system trusted CA
      DOC: configuration: add the ca-file changes
      BUG/MINOR: ssl: handle X509_get_default_cert_dir() returning NULL
      MINOR: httpclient: enable request buffering
      MEDIUM: httpclient: enable l7-retry
      BUG/MINOR: httpclient: end callback in applet release

Willy Tarreau (22):
      BUG/MINOR: samples: add missing context names for sample fetch functions
      MINOR: management: add some basic keyword dump infrastructure
      MINOR: config: add a function to dump all known config keywords
      MINOR: filters: extend flt_dump_kws() to dump to stdout
      MINOR: services: extend list_services() to dump to stdout
      MINOR: cli: add a new keyword dump function
      MINOR: acl: add a function to dump the list of known ACL keywords
      MINOR: samples: add a function to list register sample fetch keywords
      MINOR: sample: list registered sample converter functions
      MINOR: tools: add strordered() to check whether strings are ordered
      MINOR: action: add a function to dump the list of actions for a ruleset
      MINOR: config: alphanumerically sort config keywords output
      MINOR: sample: alphanumerically sort sample & conv keyword dumps
      MINOR: acl: alphanumerically sort the ACL dump
      MINOR: cli: alphanumerically sort the dump of supported commands
      MINOR: filters: alphabetically sort the list of filter names
      MINOR: services: alphabetically sort service names
      BUG/MINOR: cli/stream: fix "shutdown session" to iterate over all threads
      BUG/MAJOR: mux_pt: always report the connection error to the conn_stream
      CLEANUP: hpack: be careful about integer promotion from uint8_t
      OPTIM: hpack: read 32 bits at once when possible.
      BUG/MINOR: quic: set the source not the destination address on accept()

---

Reply via email to