Hi,

HAProxy 2.5-dev9 was released on 2021/10/08. It added 162 new commits
after version 2.5-dev8.

This brings the last round of possibly breaking changes. From this point
we should be careful not to change significant stuff and only to finish
what was begun, fix bugs, and perform some cleanups and doc updates,
especially since there has been a growing number of issues lately, some
of which might have accumulated due to developers being busy finishing
their changes and also because we're seeing an increase of feature
requests that take time to review and/or qualify. Thus my hope for next
versions is to see this number of issues go down, and likely a lot of
the small pending stuff completed.

This version looks large but it's mostly due to some recent pain with
includes (recurring issue) that managed to put a halt to the progress on
thread-groups. However as usual, many files are touched to move stuff
around but if it builds it's doesn't bring anything, otherwise it breaks
and we discover that some fixes are missing :-)  The nice part in this is
that the routine build times dropped by ~38%, showing that code hygiene
ultimately pays off. If we keep that stuff away, and the usual bugs fixed
in every version, we're left mostly with:

  - initial support for a thread group in front of the "thread" keyword
    on "bind" lines, and for the "thread-groups" directive in the config.
    For now it has no visible effect (group limited to 1 by default) but
    it will help maintain compatible configs with future versions, that
    will ease migrations back and forth.

  - HTTP/1 updates to comply with latest updates to the spec:
    Transfer-Encoding should not appear with HTTP/1.0 and can be abused
    depending on how other intermediaries parse it; now a request or
    response featuring a Transfer-Encoding header will automatically be
    the last one on the connection. Similarly, since Content-Length is
    forbidden to send together with Transfer-Encoding, seeing them both
    implies talking with a non-conforming agent. The connection will also
    be closed after the transfer in this case. The "TE" header is sanitized
    to make sure not to advertise unsupported encodings to the server. And
    unsupported encodings in requests or responses will be rejected to
    prevent cache pollution or corrupted transfers.

  - A number of improvements and fixes were brought to the http client
    (both Lua an native), mostly on resource freeing.

  - a new batch of QUIC fixes was merged, which mainly focuses on resource
    freeing.

  - "show pools" on the CLI will indicate what part of the "used" value
    represents free memory in thread-local caches; some users were confused
    into thinking they were facing a leak, and it's not normal that we only
    report confusing information there.

  - the "ssl_bc_hsk_err" sample fetch introduced in 2.5-dev6 was renamed to
    "ssl_bc_err" because it will report more than just handshake errors in
    TLS 1.3. Now SSL errors should be more accurate, especially when they
    involve a peer rejecting a certificate.

  - 3 regtests were added and 3 other ones fixed and re-enabled.

  - the "conn_cur" stick-table data is not learned anymore from other peers.
    This was a flaw since this element became replicable, which has caused
    a number of questions (and even fixes). It represents a gauge that
    corresponds to the number of currently active connections tracking a
    key on the local peer, or on the one that pushed it last. Writing a
    value from another peer here only results in the entry reaching zero
    before the end, or worse, not being able to reach zero because the value
    is higher than the local number of connections on the key. This happens
    quite often during reloads or in active-backup setups so let's put an
    end to this mistake. It's still emitted though, in case users developed
    monitoring systems based on the protocol, they will continue to work.
    The patch is trivial to backport, if some users are annoyed enough by
    the current behavior, we could discuss about backporting it (but not
    too far, say 2.4 max).

  - usual small batch of doc updates

For the pending stuff, I have a local list of small trivial things to be
done that are independent on the release and that can get merged as they
are done. There's the set-src/set-dst stuff to be fixed (discussed in issue
#1303), enabling support for set-var() in "tcp-request connection", and
checking with Björn if we can get MPTCP finished in time (I think so but
as usual there's still some work to be done for both of us). This one
should be harmless as well so I'm fine with merging it late. I know that
Rémi was working on JWT decoding, and similarly it should integrate
seamlessly, so if it arrives late it should be a problem.

And the rest will have to be for 2.6. So far, so good. Please do not send
new features that require reviews at this point so that we can all stay
focused on what still has to be finished.

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 :
Amaury Denoyelle (10):
      BUG/MINOR: task: fix missing include with DEBUG_TASK
      BUG/MEDIUM: mux-quic: reinsert all streams in by_id tree
      BUG/MAJOR: xprt-quic: do not queue qc timer if not set
      MINOR: mux-quic: release connection if no more bidir streams
      BUG/MAJOR: quic: remove qc from receiver cids tree on free
      MINOR: qpack: do not encode invalid http status code
      MINOR: qpack: support non-indexed http status code encoding
      MINOR: qpack: fix memory leak on huffman decoding
      CLEANUP: mux-quic: remove unused code
      BUG/MINOR: quic: fix includes for compilation

Christopher Faulet (16):
      MINOR: log: Try to get the status code when MUX_EXIT_STATUS is retrieved
      MINOR: mux-h1: Set error code if possible when MUX_EXIT_STATUS is returned
      MINOR: mux-h1: Be able to set custom status code on parsing error
      MEDIUM: mux-h1: Reject HTTP/1.0 GET/HEAD/DELETE requests with a payload
      MEDIUM: h1: Force close mode for invalid uses of T-E header
      BUG/MINOR: mux-h1/mux-fcgi: Sanitize TE header to only send "trailers"
      MINOR: http: Add 422-Unprocessable-Content error message
      MINOR: h1: Change T-E header parsing to fail if chunked encoding is found 
twice
      BUG/MEDIUM: mux-h1/mux-fcgi: Reject messages with unknown transfer 
encoding
      REGTESTS: Add script to validate T-E header parsing
      MINOR: arg: Be able to forbid unresolved args when building an argument 
list
      BUG/MINOR: tcpcheck: Don't use arg list for default proxies during parsing
      BUG/MINOR: tcp-rules: Stop content rules eval on read error and 
end-of-input
      BUG/MEDIUM: filters: Fix a typo when a filter is attached blocking the 
release
      BUG/MEDIUM: http-ana: Clear request analyzers when applying redirect rule
      BUG/MEDIUM: mux_h2: Handle others remaining read0 cases on partial frames

Emeric Brun (1):
      DOC: peers: fix doc "enable" statement on "peers" sections

Frédéric Lécaille (4):
      MINOR: quic: Distinguish packet and SSL read enc. level in traces
      MINOR: quic: Add a function to dump SSL stack errors
      MINOR: quic: BUG_ON() SSL errors.
      MINOR: quic: Fix SSL error issues (do not use ssl_bio_and_sess_init())

Remi Tricot-Le Breton (3):
      MINOR: ssl: Set connection error code in case of SSL read or write fatal 
failure
      MINOR: ssl: Rename ssl_bc_hsk_err to ssl_bc_err
      MINOR: ssl: Store the last SSL error code in case of read or write failure

Thayne McCombs (1):
      DOC: configuration: add clarification on escaping in keyword arguments

William Lallemand (18):
      head-truc
      REGTESTS: lua: test the httpclient:get() feature
      Revert "head-truc"
      BUG/MEDIUM: httpclient: replace ist0 by istptr
      MINOR: Makefile: add MEMORY_POOLS to the list of DEBUG_xxx options
      REGTESTS: ssl: enable show_ssl_ocspresponse.vtc again
      REGTESTS: ssl: enable ssl_crt-list_filters.vtc again
      REGTESTS: ssl: show_ssl_ocspresponse w/ freebsd won't use base64
      REGTESTS: ssl: wrong feature cmd in show_ssl_ocspresponse.vtc
      MINOR: httpclient: destroy() must free the headers and the ists
      MINOR: httpclient: set HTTPCLIENT_F_ENDED only in release
      MINOR: httpclient: stop_and_destroy() ask the applet to autokill
      MINOR: httpclient: test if started during stop_and_destroy()
      MINOR: httpclient/lua: implement garbage collection
      BUG/MEDIUM: httpclient/lua: crash because of b_xfer and get_trash_chunk()
      MINOR: httpclient: destroy checks if a client was started but not stopped
      BUG/MINOR: httpclient/lua: does not process headers when failed
      MINOR: httpclient/lua: supports headers via named arguments

Willy Tarreau (109):
      MINOR: config: use a standard parser for the "nbthread" keyword
      CLEANUP: init: remove useless test against MAX_THREADS in affinity loop
      MEDIUM: init: de-uglify the per-thread affinity setting
      MINOR: init: extract the setup and end of threads to their own functions
      REORG: pools: move default settings to defaults.h
      BUG/MEDIUM: lua: fix wakeup condition from sleep()
      BUG/MAJOR: lua: use task_wakeup() to properly run a task once
      MINOR: tasks: catch TICK_ETERNITY with BUG_ON() in __task_queue()
      CLEANUP: tasks: remove the long-unused work_lists
      MINOR: task: provide 3 task_new_* wrappers to simplify the API
      MINOR: time: uninline report_idle() and move it to task.c
      REORG: sched: move idle time calculation from time.h to task.h
      REORG: sched: move the stolen CPU time detection to sched_entering_poll()
      CLEANUP: server: always include the storage for SSL settings
      CLEANUP: sample: rename sample_conv_var2smp() to *_sint
      CLEANUP: sample: uninline sample_conv_var2smp_str()
      MINOR: sample: provide a generic var-to-sample conversion function
      BUG/MEDIUM: sample: properly verify that variables cast to sample
      BUILD: action: add the relevant structures for function arguments
      BUILD: extcheck: needs to include stream-t.h
      BUILD: hlua: needs to include stream-t.h
      BUILD: stats: define several missing structures in stats.h
      BUILD: resolvers: define missing types in resolvers.h
      BUILD: httpclient: include missing ssl_sock-t
      BUILD: sample: include openssl-compat
      BUILD: http_ana: need to include proxy-t to get redirect_rule
      BUILD: http_rules: requires http_ana-t.h for REDIRECT_*
      BUILD: vars: need to include xxhash
      BUILD: peers: need to include eb{32/mb/pt}tree.h
      BUILD: ssl_ckch: include ebpttree.h in ssl_ckch.c
      BUILD: compiler: add the container_of() and container_of_safe() macros
      BUILD: idleconns: include missing ebmbtree.h at several places
      BUILD: connection: connection.h needs list.h and server.h
      BUILD: tree-wide: add missing http_ana.h from many places
      BUILD: cfgparse-ssl: add missing errors.h
      BUILD: tcp_sample: include missing errors.h and session-t.h
      BUILD: mworker: mworker-prog needs time.h for the 'now' variable
      BUILD: tree-wide: add several missing activity.h
      BUILD: compat: fix -Wundef on SO_REUSEADDR
      CLEANUP: pools: pools-t.h doesn't need to include thread-t.h
      REORG: pools: uninline the UAF allocator and force-inline the rest
      REORG: thread: uninline the lock-debugging code
      MINOR: thread/debug: replace nsec_now() with now_mono_time()
      CLEANUP: remove some unneeded includes from applet-t.h
      REORG: listener: move bind_conf_alloc() and listener_state_str() to 
listener.c
      CLEANUP: listeners: do not include openssl-compat
      CLEANUP: servers: do not include openssl-compat
      REORG: ssl: move ssl_sock_is_ssl() to connection.h and rename it
      CLEANUP: mux_fcgi: remove dependency on ssl_sock
      CLEANUP: ssl/server: move ssl_sock_set_srv() to srv_set_ssl() in server.c
      REORG: ssl-sock: move the sslconns/totalsslconns counters to global
      REORG: sample: move the crypto samples to ssl_sample.c
      REORG: sched: moved samp_time and idle_time to task.c as well
      REORG: time/ticks: move now_ms and global_now_ms definitions to ticks.h
      CLEANUP: tree-wide: remove unneeded include time.h in ~20 files
      REORG: activity: uninline activity_count_runtime()
      REORG: acitvity: uninline sched_activity_entry()
      CLEANUP: stream: remove many unneeded includes from stream-t.h
      CLEANUP: stick-table: no need to include socket nor in.h
      MINOR: connection: use uint64_t for the hashes
      REORG: connection: move the hash-related stuff to connection.c
      REORG: connection: uninline conn_notify_mux() and conn_delete_from_tree()
      REORG: server: uninline the idle conns management functions
      REORG: ebtree: split structures into their own file ebtree-t.h
      CLEANUP: tree-wide: only include ebtree-t from type files
      REORG: connection: move the largest inlines from connection.h to 
connection.c
      CLEANUP: connection: do not include http_ana!
      CLEANUP: connection: remove unneeded tcpcheck-t.h and use only session-t.h
      REORG: connection: uninline the rest of the alloc/free stuff
      REORG: task: uninline the loop time measurement code
      CLEANUP: time: move a few configurable defines to defaults.h
      CLEANUP: fd: do not include time.h
      REORG: fd: uninline compute_poll_timeout()
      CLENAUP: wdt: use ha_tkill() instead of accessing pthread directly
      REORG: thread: move the thread init/affinity/stop to thread.c
      REORG: thread: move ha_get_pthread_id() to thread.c
      MINOR: thread: use a dedicated static pthread_t array in thread.c
      CLEANUP: thread: uninline ha_tkill/ha_tkillall/ha_cpu_relax()
      MINOR: pools: report the amount used by thread caches in "show pools"
      BUILD: connection: avoid a build warning on FreeBSD with SO_USER_COOKIE
      BUILD: init: avoid a build warning on FreeBSD with USE_PROCCTL
      REORG: time: move time-keeping code and variables to clock.c
      REORG: clock: move the updates of cpu/mono time to clock.c
      MINOR: activity: get the run_time from the clock updates
      CLEANUP: clock: stop exporting before_poll and after_poll
      REORG: clock: move the clock_id initialization to clock.c
      REORG: clock/wdt: move wdt timer initialization to clock.c
      MINOR: clock: move the clock_ids to clock.c
      MINOR: wdt: move wd_timer to wdt.c
      CLEANUP: wdt: do not remap SI_TKILL to SI_LWP, test the values directly
      REORG: thread/sched: move the task_per_thread stuff to thread_ctx
      REORG: thread/clock: move the clock parts of thread_info to thread_ctx
      REORG: thread/sched: move the thread_info flags to the thread_ctx
      REORG: thread/sched: move the last dynamic thread_info to thread_ctx
      MINOR: thread: make "ti" a const pointer and clean up thread_info a bit
      MINOR: threads: introduce a minimalistic notion of thread-group
      MINOR: global: add a new "thread-groups" directive
      MINOR: global: add a new "thread-group" directive
      MINOR: threads: make tg point to the current thread's group
      MEDIUM: threads: automatically assign threads to groups
      MINOR: threads: set the group ID and its bit in the thread group
      MINOR: threads: set the tid, ltid and their bit in thread_cfg
      MEDIUM: threads: replace ha_set_tid() with ha_set_thread()
      MINOR: threads: add the current group ID in thread-local "tgid" variable
      MINOR: debug: report the group and thread ID in the thread dumps
      MEDIUM: listeners: support the definition of thread groups on bind lines
      MINOR: threads: add a new function to resolve config groups and masks
      MEDIUM: config: resolve relative threads on bind lines to absolute ones
      MEDIUM: stick-table: never learn the "conn_cur" value from peers

---

Reply via email to