v2.14.6
TimmyOVO/deepseek-ocr.rsv2.14.6Aug 27, 2026by github-actions[bot]
AI Summary
This release focuses on performance optimizations, particularly in JetStream stream reads and subject matching, alongside numerous bug fixes for data races, consumer management, and Raft consistency.
Key Highlights
- Isolated stream reads with separate locks for improved performance
- Improved performance of looking up matching sequence numbers for multi-subject gets
- Fixed data races in consumer direct or sourcing status and batch ID access
- Fixed Raft catchup stall and snapshot replay issues
- Improved buffer recycling and memory management
Full Release Notes
## Changelog Refer to the [2.14 Upgrade Guide](https://docs.nats.io/release-notes/whats_new/whats_new_214) for backwards compatibility notes with 2.12.x. Please note that the 2.13.x version was skipped. ### Go Version - 1.26.7 ### Improved General - Removal from service import response maps is now constant-time (#8463) - The client code no longer resets the deadline more times than necessary when flushing client buffers (#8513) - The client write buffers are now freed correctly when the working buffer exceeds a rational size (#8515) JetStream - Stream reads are now isolated with a separate lock, which improves the performance of direct gets (#8486) - Improved the performance of looking up matching sequence numbers for multi-subject gets (#8486) - Reduced the number of heap escapes in subject tree matching (#8526) ### Fixed General - WebSocket client buffers are recycled more aggressively when reallocating into larger buffers (#8518) - Fixed missing routes after a reconnect when gossiped URLs were rejected (#8527) JetStream - The filestore block sync no longer incorrectly skips blocks that were compacted during the same pass (#8456) - The filestore block sync now performs a single directory sync upon completion rather than once per compacted block (#8461) - The filestore I/O semaphore now covers block sync operations (#8462) - Stream config updates with replicas greater than 1 are now rejected on non-clustered systems (#8464) - Fixed some issues that could prevent stream snapshots from taking place on a clean shutdown (#8465) - The filestore inline compaction no longer ignores `sync_interval: always` (#8475) - The stream created time is now preserved after recovery on a standalone server (#8471, contributed by @Green7) - Fixed a data race that could apply when accessing the batch ID (#8369) - Fixed a data race when reading the consumer direct or sourcing status (#8478, contributed by @nberlee) - Prevent the consumer direct or sourcing status from being changed with a consumer update (#8478, contributed by @nberlee) - Fixed an issue where the server could fail to distinguish consumer tiers when enforcing limits (#8484) - Fixed a flow control problem where replicated consumers could get stuck after a leader change (#8488) - Fixed various consumer create issues that could destroy the state of an existing consumer with the same name (#8491) - Internal message delete proposals are no longer counted in the JS API statistics (#8502) - Dynamic filestore reservations no longer incorrectly shrink based on used storage after restarts (#8503) - Fixed a signalling issue that could stall Raft catchups (#8501) - The pending append entry cache in-memory is now bounded by size as well as entry count (#8501) - Fixed an issue where a stale snapshot from a previous Raft group could be replayed if the group name was unchanged (#8501) - Consumer delivery counts will no longer underflow below zero (#8512, contributed by @no-hup) - `AckFlowControl` consumers from a work queue stream will no longer incorrectly ack messages outside of the consumer filter (#8431, #8528) ### Complete Changes https://github.com/nats-io/nats-server/compare/v2.14.5...v2.14.6