Skip to content

v2.9.0-rc.1

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Jun 12:34
· 13 commits to main since this release

This release adds OAuth2/OIDC SSO login to the management UI, sends publish confirms only after messages are flushed to disk (with a --no-sync opt-out), verifies PROXY protocol trusted sources, switches to Crystal's native kTLS support and supports per-queue-type policy apply-to targets. It also brings a number of stream, clustering and HTTP API fixes.

Added

  • OAuth2/OIDC SSO login to the management UI #1768
  • proxy_protocol_trusted_sources config option supporting individual IPs and CIDR notation #1601
  • Startup warning when PROXY protocol is enabled without proxy_protocol_trusted_sources configured #1601
  • load_definitions config option #1828
  • Per-queue-type policy apply-to targets (classic_queues, quorum_queues, streams) for RabbitMQ definitions compatibility #2015
  • Bindings count in overview, CLI status and Prometheus metrics #2018
  • Per-vhost message stats and labeled channel metrics in /metrics/detailed #1926
  • --no-sync option to disable syncfs on publish confirm #1987
  • control_unix_path config option to make the lavinmqctl control socket path configurable #2029
  • User tag classes to control management UI element visibility #1892

Changed

  • Send publish confirms only after messages are flushed to disk with syncfs #1891
  • Use Crystal's native kTLS support #1937
  • Fiber-free synchronous replication a011ec99
  • On-demand deliver_loop fibers for AMQP consumers #1722
  • Idle fiber management for queue message expiration #1614
  • Replace periodic GC.collect with on-demand GC #2016
  • Batch persistence during definitions import #2014
  • tcp_proxy_protocol now accepts boolean values (true/false/yes/no); legacy 1/2 are treated as enabled, 0 disables. Protocol version is auto-detected #1601
  • Print clean error messages on boot failures instead of stacktraces aba7361b
  • Group lavinmqctl help output by command category #1830
  • Use amq.default in UI related operations #1913
  • New action bar for tables with row counter and column selector #1900
  • Bake static assets as string literals to reduce compile memory #1944
  • Bump amq-protocol to 1.2.0 #1996
  • Update amqp-client to 1.3.3, lz4 and systemd 3.0.1 dependencies cd2f4c58

Removed

  • unix_proxy_protocol config option; Unix sockets always auto-detect PROXY protocol headers #1601

Fixed

  • GET /api/queues/:vhost/:name no longer emits the message_stats field twice #2031
  • GET /api/channels and GET /api/connections no longer include the per-metric rate-history log arrays in every list row, matching GET /api/queues. The logs are only needed by the per-object detail pages, so they are now returned solely by GET /api/channels/:name and GET /api/connections/:name, greatly reducing list response size and latency on large deployments #2025
  • Skip the message-expire fiber on streams to avoid a Closed mfile crash when the last consumer disconnects after retention dropped segments ded4b69b
  • Discard settlement frames (ack/nack/reject) for an already-closed channel instead of closing the connection with CHANNEL_ERROR f421d6e3
  • Treat a publish to a concurrently-closed queue as dropped instead of raising, which previously surfaced as an HTTP publish 500 93f88429
  • Stop federation and shovel links before tearing down vhosts on shutdown, and keep the embedded amqp-client's routine connection-teardown logging (already reported via the lmq.* federation/shovel layers) out of the broker log 2b213d3c
  • Reply with Basic.GetEmpty instead of erroring when a basic_get races a concurrent queue delete 9fbf4dc4
  • Serialize store saves (vhosts, parameters, users) so concurrent create/delete (under churn) don't race on the shared .tmp file and fail the rename f2316d0d
  • Don't crash the MQTT brokers on a vhost Closed event for a vhost that was never registered (e.g. one whose create didn't finish) fcf592c4
  • Serialize per-resource policy application and run stream drop_overflow under the message-store lock, fixing a segfault when policies were applied to a queue concurrently (e.g. under policy churn) with publishing/consuming 7f4b8399
  • Race between stream queue delete and drop_overflow #1939
  • Stream queue crash when delivery-limit policy is applied d3667f99
  • Handle empty trailing stream segment on load 4efe79c4
  • Serialize stream consumer-offset access under the message-store lock for MT safety #1973
  • Skip delete_message after queue close #1961
  • MessageStore size leaks in purge_all and requeued shift? #1957
  • Handle reject-publish overflow in HTTP publish and multi-queue routes #1958
  • Keep closing AMQP channels until close-ok #1980
  • MQTT max inflight message flow control #1935
  • Exit if etcd lease expires while waiting to be in sync #1969
  • Wait lease TTL + 2 seconds before retrying etcd lease grant 57d898cd
  • Delete empty queue directories on followers during streaming #2005
  • Broker start failure for passwordless users with null hashing_algorithm #1898
  • Anchor server uptime and CPU counters to OS process lifetime #2012
  • Use :vhost named parameter for DELETE vhost-limits route #1994
  • OpenAPI docs fixes #2004
  • Log kTLS=off instead of kTLS= when offload is inactive #2019
  • MQTT packet ID overflow in lavinmqperf #1997
  • -q flag collision between QoS and quiet in mqttperf #1951
  • Smooth pacing in lavinmqperf AMQP throughput 85711b32