Changelog
Refer to the 2.10 Upgrade Guide for backwards compatibility notes with 2.9.x.
Go Version
- 1.23.6 (#6452)
Improved
JetStream
- Improved the error message when trying to change the consumer type (#6408)
- Improved the error messages returned by
healthz
to be more descriptive about why the healthcheck failed (#6416) - Removed unnecessary locking around finding out if Raft groups are leaderless, reducing contention (#6438)
- Optimisations for calculating num pending etc by handling literal subjects using a faster path (#6446)
- Optimisations for loading the next message with multiple filters by avoiding linear scans in message blocks in some cases, particularly where there are lots of deletes or a small number of subjects (#6448)
- The limit of concurrent disk I/O operations that JetStream can perform simultaneously has been raised (#6449)
- Avoid unnecessary system time calls when ranging a large number of interior deletes, reducing CPU time (#6450)
- Reduced the number of allocations needed for handling client info headers around the JetStream API and service imports/exports (#6453)
- Num pending with multiple filters, enforcing per-subject limits and loading the per-subject info now use a faster subject tree lookup with fewer allocations (#6458)
- Calculating the starting sequence for a source consumer has been optimised for streams where there are many interior deletes (#6461)
Fixed
JetStream
- A data race between the stream config and looking up streams has been fixed (#6424) Thanks to @evankanderson!
- Fixed an issue where Raft proposals were incorrectly dropped after a peer remove operation, which could result in a stream desync (#6456)
- Stream disk reservations will no longer be counted multiple times after stream reset errors have occurred (#6457)
- Fixed an issue where a stream could desync if the server exited during a catchup (#6459)
- Fixed a deadlock that could occur when cleaning up large numbers of consumers that have reached their inactivity threshold (#6460)
WebSockets
- Fixed a couple cases where memory may not be reclaimed from Flate compressors correctly after a WebSocket client disconnect or error scenario (#6451)
Tests