Changelog
Refer to the 2.12 Upgrade Guide for backwards compatibility notes with 2.11.x.
Go Version
- 1.26.0 (#7818)
Dependencies
- github.com/nats-io/nkeys v0.4.15 (#7797)
- github.com/klauspost/compress v1.18.4 (#7812)
- golang.org/x/sys v0.41.0 (#7812)
- github.com/antithesishq/antithesis-sdk-go v0.6.0-default-no-op (#7835)
- golang.org/x/crypto v0.48.0 (#7835)
Improved
JetStream
- "Catchup for stream" log lines are now more consistent (#7784)
- Raft now only accepts forwarded proposals if caught up as the new leader, limiting potentially unbounded log growth (#7809)
- Raft now correctly refuses concurrent membership changes if forwarded a peer removal from another node (#7809)
- The
max_consumerslimit of a stream can now be updated after stream creation (#7724) - The pending messages and bytes are now included in consumer unpin responses (#7815)
- Stream backups/snapshots are now streamed to clients with improved flow control, which should improve throughput and robustness, particularly over unreliable links, reducing the chance of backups failing due to flow control errors (#7828)
Fixed
JetStream
- A filestore bug which could hold onto a lock when exiting after an error has been fixed (#7780)
- The filestore now always uses tombstones for recovering trailing deletes (#7782)
- Fixed a race condition when rebuilding block state during recovery (#7783)
- The filestore binary search for a message block now correctly sorts blocks that contain only tombstones (#7787)
- Fixed a data race in the filestore when acquiring the deduplication sequence (#7789)
- Raft now correctly checks the closed state when reporting if the node is current (#7793)
- Raft now sets the election timeout instead of the campaign timeout when leaving observer mode (#7793)
- The metalayer now tracks in-flight meta changes for invalid stream or consumer updates (#7798)
- The metalayer no longer incorrectly overwrites local consumer assignments before they are applied, which would result in them being omitted from the meta snapshot (#7798)
- The inactive threshold clean-up no longer leave lingering goroutines (#7799)
- Pooled publish message underlying buffer capacity is now reused correctly (#7790)
- Consumers with overlapping filter subjects where one is not a subset of the other are now allowed (#7810)
- The filestore now checksums after truncation on compressed or encrypted stores (#7816)
- The filestore no longer leaks locks in various error states (#7816)
- The filestore now correctly holds the lock during snapshotting on encrypted stores (#7816)
- The filestore now ensures that num pending calculations cannot overflow (#7816)
- The filestore now correctly recalculates the subject state as needed when finding last sequences (#7816)
- The filestore now sorts configured subjects when checking whether filters represent all of the configured filters (#7816)
- The filestore now avoids subject and header corruption in more cases (#7816)
- Consumer unpinning is now handled correctly when stepping down (#7819)
- Consumer unpinning now allows the next client to pick up the next pin without waiting for new messages (#7819)
- Fixed a race condition when remapping the underlying group of a replicated asset (#7820)
- An overflowed pull request when min pending or min ack pending is above the threshold is now handled correctly (#7795)
- Timers are no longer leaked when failing to set up mirrors, which resulted in high CPU usage (#7825)
- Monitor quit channels are created on demand, fixing cases where an asset restarts with a different underlying Raft group (#7837)
MQTT
- SUB and UNSUB packets now correctly detect and reject the Packet Identifier being set to 0 (#7805)