v2.5.0-beta.1
Pre-release
Pre-release
·
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::FileRangehas 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
AddActionandReplaceActionhave 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
madviseto signal that a read segment is no longer needed #ea6171ac MFileis now thread-safe #9ef445aa- Sockets are now flushed only when the delivery loop would block #29ab3436
MessageStorehas been moved fromLavinMQ::QueuetoLavinMQ#1158MFileand their replication have been refactored #644a71bc- The
/api/queuesendpoint now exposesmessages_readyandmessages_unacknowledged#1121 MFiles are no longer included in coredumps #7908acd9- A new version of
amq-protocolwith aTable#hashimplementation 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
RetainStorehas 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_offsetfile is now closed and deleted when the message store is closed or deleted #a3b746cb - The waitgroup around delivery has been dropped #1f893c13
MFile#truncatehas 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
BoolChannelwith a timeout is now used for@is_leaderto ensure it is set #1138 MFile#flushnow always references the mmap #c01c409a- An error is now raised if the body in
Message#to_iodoes not match the body size #203772cf - A bug in
MsgStore#delete_unused_segmentshas been fixed #353885a8 - An error is now rescued when reconnecting a broker and the waitgroup counter is negative #1131
cloneis now used instead ofdup#feb438a8- Arguments are now passed as binding arguments #d150f961
@argumentsare 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_diris now prepended when hashing a file #670315falz4is now only flushed after all files have been sent #a09d05d8Fiber.yieldis 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
ReplaceActionnow 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_ackadded, and fixed a bug regardingdeliver. #1146, #1119, #1099
Lavinmqperf & lavinmqctl
lavinmqperfnow supports MQTT #983lavinmqperf throughputnow 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 alland 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
Messagein the MQTT retain specs is now correct #674ba021 RetainStoreis 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 lintcommand #1116
Deprecated
- queue metrics
ready,ready_bytes,unacked,unacked_bytesare deprecated in favour of
messages_ready,message_bytes_ready,messages_unacknowledged,message_bytes_unacknowledged
and will be removed with the next major version. #1121