Version 1.15.1 includes stability fixes, latency improvements and new features. There’s also one change in behavior that should affect nobody with a proper client.
First, a crash fix: new clients connecting with an existing client ID could cause a crash because of lack of thread synchronization in some parts. It requires authenticated clients, with persistent sessions, and some amount of brute forcing. Upgrading to fix this is advised for everybody.
Then, the change in behavior is when it comes to disconnecting existing clients when connecting with the same client ID. That will now not be permitted when the username in the session is different. The spec is not really clear on this, but this change had been considered for a long time. It was now also better for architectural reasons. If you run into this, better read Understanding clean session and clean start. In practice, this will protect your session against bad client IDs. It happens frequently in the field that people use bad client IDs like ‘myclient’. If two clients of different users do that, they would kick each other out. This is now no longer possible. First one ‘wins’.
Other changes are:
- Add setting save_state_interval.
- Add new retained message mode enabled_without_persistence.
- If you have persistence enabled, saving subscriptions now has less impact on the running system.
- Add feature subscription_node_lifetime, to avoid costly recreation of nodes when you know you have repeating subscription patterns. This avoids the need for write locks.
- More granular locking around subscriptions and sessions, to reduce lock contention and therefore latency, especially when clients subscribe and unsubscribe frequently.
- Speed-up quitting when a background job for saving retained messages was already running at time of quitting. It disables the deferral algorithm normally in place to prevent locks.
And let’s not forgot our new fancy colored man pages:
On Debian based distros, you need to set GROFF_SGR=1
in your shell environment to enable it.