Skip to content

v2.5.0-beta.1

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 01 Jul 14:29
· 561 commits to main since this release

This release brings significant improvements across multiple areas of LavinMQ. Key focus areas include major clustering and replication enhancements for better reliability and performance, a new light mode UI theme alongside numerous user interface improvements, substantial performance optimizations including faster boot times and improved memory management, and enhanced tooling with expanded MQTT support. The release also includes important bug fixes.

Added

  • Boot time is greatly improved by storing the message count in a file alongside the message segment #1163
  • Added Light mode for the UI 46b00e4c
  • Shovels can now be paused and resumed #1103 & #1151
  • Ability to limit the number of consumers per channel #1106
  • Exchanges now support binding arguments #1092

Changed

Replication

  • The clustering client's file replacement logic is now smarter #6b96bfcf
  • The clustering client now sends requested files on the fly #730a13a0
  • Hashes used to compare file checksums between the leader and followers are now cached #ab82a34f
  • The server no longer waits for blocked followers #b8939561
  • Clustering::FileRange has been dropped in favor of transferring bytes directly #11c51e54
  • Replication servers' file sizes are now calculated correctly #6e513d7a
  • The read/write timeout for followers has been increased to 60s #c0aaabed
  • The progress of a synchronizing follower is now logged #75474221
  • The replication of stream queue's consumer offsets has been improved #f59d379b
  • The replicator is now closed first to allow followers to drain their action queue #1159
  • Cluster IDs are now encoded with base 36 #6a1cc15f
  • AddAction and ReplaceAction have been renamed #e5e88199
  • The clustering client has been refactored #e38103c8

UI

  • The user form in the UI now has a password visibility toggle and a password generation button #1150
  • The creation of buttons in the UI has been abstracted #1139
  • The frontend now uses tagged template literals instead of encodeURIComponent #1155
  • The behavior of the multi-control popup has been improved #1144
  • The unbind button in the bindings listing in the queue view has been fixed #1145

Other changes

  • Federation now respects max-hops #1130
  • Relaxed ordering for atomic counters e95d9190
  • Use madvise to signal that a read segment is no longer needed #ea6171ac
  • MFile is now thread-safe #9ef445aa
  • Sockets are now flushed only when the delivery loop would block #29ab3436
  • MessageStore has been moved from LavinMQ::Queue to LavinMQ #1158
  • MFile and their replication have been refactored #644a71bc
  • The /api/queues endpoint now exposes messages_ready and messages_unacknowledged #1121
  • MFiles are no longer included in coredumps #7908acd9
  • A new version of amq-protocol with a Table#hash implementation is now used #115ce4a0
  • Improved consumer fairness and performance for AMQP 7a1455dc
  • Verification of the default password hash on launch #1078

Fixed

  • Delete orphan acks files on start and shutdown #1175
  • A file descriptor leak in RetainStore has been fixed and the code has been refactored #be4e5032
  • A variable is now reassigned to a local before being used in a spawned fiber #0591ae5e
  • The consumer_offset file is now closed and deleted when the message store is closed or deleted #a3b746cb
  • The waitgroup around delivery has been dropped #1f893c13
  • MFile#truncate has been fixed #65d0cb2f
  • More exceptions are now logged #c6f48b2a
  • The shovel API no longer returns a 422 error when resuming a running shovel #1157
  • A BoolChannel with a timeout is now used for @is_leader to ensure it is set #1138
  • MFile#flush now always references the mmap #c01c409a
  • An error is now raised if the body in Message#to_io does not match the body size #203772cf
  • A bug in MsgStore#delete_unused_segments has been fixed #353885a8
  • An error is now rescued when reconnecting a broker and the waitgroup counter is negative #1131
  • clone is now used instead of dup #feb438a8
  • Arguments are now passed as binding arguments #d150f961
  • @arguments are no longer parsed for each binding #d4fa4713
  • Binding arguments are no longer merged with exchange arguments #e333d0b6
  • EOF errors (closed by peer) for connect attempts are no longer logged #1118
  • @data_dir is now prepended when hashing a file #670315fa
  • lz4 is now only flushed after all files have been sent #a09d05d8
  • Fiber.yield is now called after each SHA1 file calculation #59448389
  • There is now only a read timeout during follower negotiation #2d95fbfb
  • There is no longer a write buffer in clustering clients #7b4cbc63
  • The user not found error is no longer logged twice #1109
  • Unacked messages are now requeued before removing the consumer when setting the client in an MQTT session #1102
  • Password authentication is now properly abstracted into the auth namespace #1183
  • ReplaceAction now properly handles underlying file replacement #1179
  • Priority message store refactored to use one message store per priority #1156
  • OpenAPI documentation for vhost limits endpoints #1122
  • Metrics - deliver_no_ack & get_no_ack added, and fixed a bug regarding deliver. #1146, #1119, #1099

Lavinmqperf & lavinmqctl

  • lavinmqperf now supports MQTT #983
  • lavinmqperf throughput now uses atomic counters #cd522740
  • lavinmqctl now validates access to the unix socket #1181
  • lavinmqperf - All clients are now waited for to be connected before publishing/consuming #1120

Specs

  • A spec has been added to verify x-match all and missing headers #ba5be445
  • A queue spec is now less flakey on OS X #3fd8dd9c
  • More UI specs have been added #1140
  • Message files in specs are now truncated instead of resized #386d1365
  • The body size for Message in the MQTT retain specs is now correct #674ba021
  • RetainStore is now closed in specs to prevent file descriptor leaks #ea83d7b3
  • Specs now generate coredumps on segfault #333a4ad2
  • Specs have been added to verify a headers exchange arguments bug #aac646d9
  • Priority consumer specs that were failing on OS X have been fixed #1182
  • Clustering helper code for specs #1178

Packaging & CI

  • Alpine Linux compatibility and a corresponding Dockerfile (packaging/alpine/Dockerfile) #1115
  • The build directory in the Dockerfile is now /usr/src/lavinmq #e6092a9c
  • The container image now includes an SBOM and provenance information #54a3cc21
  • Specs are now included in the make lint command #1116

Deprecated

  • queue metrics ready, ready_bytes, unacked, unacked_bytes are deprecated in favour of
    messages_ready, message_bytes_ready, messages_unacknowledged, message_bytes_unacknowledged
    and will be removed with the next major version. #1121