Change8

v3.4-dev7

Breaking Changes
📦 haproxyView on GitHub →
2 breaking39 features🐛 52 fixes🔧 35 symbols

Summary

This release includes numerous bug fixes across various components like SSL, JWT, mworker, and stconn. It also introduces significant improvements in thread execution context tracking and management, along with enhancements to HTTP compression and SPOE handling.

⚠️ Breaking Changes

  • The `app_ops .wake()` callback function is no longer used by muxes. Developers should now use `sc_applet_process()` for applets and `sc_conn_process()` for connections instead of the `.wake()` callback.
  • The `.wake()` callback function has been removed from `app_ops`. This is a significant change affecting how state changes are handled in connection management.

Migration Steps

  1. Replace calls to the `.wake()` callback function in muxes with `sc_applet_process()` for applets and `sc_conn_process()` for connections.

✨ New Features

  • Added `proxy_get_comp()` helper function for HTTP compression.
  • Introduced a new option `restart-from-last` for `git-show-backports` script.
  • Added ECDH support in `jwt_decrypt` converters.
  • Added ecdh-es+axxxkw support in `jwt_decrypt_jwk` converter.
  • Managed EC certificates in `jwt_decrypt_cert`.
  • Added basic `thread_exec_ctx` for thread execution context tracking.
  • Extended pointer hashing code for easier manipulation.
  • Added a new pointer hash function that takes an argument.
  • Attempted different retry slots for different hashes on collision in memprof.
  • Prepared memprof to consider `exec_ctx` in reporting.
  • Permitted sorting memprof output by calling context.
  • Added a function to write a thread execution context.
  • Reported execution context on thread dumps.
  • Reported execution context on memprof output.
  • Recorded the file and line declaration of an INITCALL.
  • Decoded execution context TH_EX_CTX_INITCALL.
  • Supported decoding ha_caller type exec context.
  • Stored location for fetch/conv via initcalls.
  • Reported contexts registered directly.
  • Supported an execution context that is just a function.
  • Stored the location of keywords registered via initcalls.
  • Reported execution contexts registered directly.
  • Set the exec context to the current filter config.
  • Set the thread execution context during message callbacks.
  • Tracked mux calls to report their allocation context.
  • Set execution context on task/tasklet calls.
  • Set execution context on applet calls.
  • Kept the info of the current keyword being processed in the appctx.
  • Kept track of the initcall context since kw registration.
  • Implemented execution context for manually registered keywords.
  • Supported aggregating by caller also for memprofile.
  • Raised the default number of memprofile buckets to 4k.
  • Deferred processing of "-dt" options for traces.
  • Added function to truncate all blocks after a specific block in htx.
  • Exported "haproxy_sticktable_local_updates" metric via promex.
  • Added a function to create a tar file header.
  • Added a function to load a file into a tar archive.
  • Supported explicit "on" and "off" for "set-dumpable".
  • Read all libs in memory when set-dumpable=libs.

🐛 Bug Fixes

  • Increased SC bytes_out value in se_done_ff().
  • Fixed sample_conv_sha2() by checking EVP_Digest* failures.
  • Prevented getting proto to use for websocket if there is no server.
  • Checked 'jwt_tokenize' return value.
  • Used explicit socat address type for haproxy-reload.
  • Hid the common ancestor warning in quiet mode for git-show-backports.
  • Did not set the PROC_O_LEAVING flag on master process.
  • Called sc_conn_process from the I/O callback if TASK_WOKEN_MSG state was set.
  • Rely on h2s_notify_send() when resuming h2s for sending.
  • Rely on spop_strm_notify_send() when resuming streams for sending.
  • Woke up the data layer from a mux stream with TASK_WOKEN_IO state.
  • Called sc_applet_process() instead of .wake() callback function.
  • Called sc_conn_process() instead of .wake() callback function.
  • Removed wake_srv_chk() function.
  • Removed hstream_wake() function.
  • Woke up the SC with TASK_WOKEN_IO state from the opposite side.
  • Merged all .chk_rcv() callback functions in sc_chk_rcv().
  • Removed .chk_rcv() callback functions.
  • Merged all .chk_snd() callback functions in sc_chk_snd().
  • Removed .chk_snd() callback functions.
  • Merged all .abort() callback functions in sc_abort().
  • Removed .abort() callback functions.
  • Merged all .shutdown() callback functions in sc_shutdown().
  • Removed .shutdown() callback functions.
  • Totally removed app_ops from the stconns.
  • Simplified sc_abort/sc_shutdown by merging calls to se_shutdown.
  • Added a CHECK_IF() when I/O are performed on an orphan SC.
  • Exiting when couldn't find the master mworker_proc element.
  • Fixed typo in error message for `http-check expect`.
  • Fixed memory leak in jws_b64_signature.
  • Handled receiving early data with BoringSSL/AWS-LC.
  • Always stopped the receiving listener in mworker.
  • Did not report read data as early data with AWS-LC.
  • Fixed range build without test command in makefile.
  • Avoided a small memory leak in "show profiling".
  • Did not forget to validate quic-initial rules.
  • Only match worker processes when looking for unspawned proc.
  • Fixed typo &= instead of & in proc list serialization.
  • Set a timeout on the worker socketpair read at startup.
  • Avoided passing NULL version in proc list serialization.
  • Set FD_CLOEXEC on fd received via SCM_RIGHTS.
  • Did not forget to wakeup applets on shutdown.
  • Properly switched SPOE filter to WAITING_ACK state.
  • Properly aborted processing on client abort.
  • Fixed abort on close when a large buffer is used.
  • Did not perform L7 retries with large buffer.
  • Only tested number of trailers inserted in HTX message.
  • Never inserted partial headers/trailers in an HTX message.
  • Swapped L7 buffer with request buffer by hand.
  • Fixed crash in stream dump if the current rule has no keyword.
  • Made mystrtod() length-aware to prevent out-of-bounds reads.
  • Fixed condition to abort processing on client abort.

Affected Symbols