v2.14.6
Jeffallan/claude-skillsv2.14.6Aug 27, 2026by github-actions[bot]
AI Summary
This release focuses on performance optimizations for JetStream stream reads, improved filestore reliability, and fixes for various data races and consumer logic issues including AckFlowControl and delivery counts.
Key Highlights
- Stream reads are isolated with separate locks to improve performance of direct gets
- Fixed data races in consumer direct/sourcing status and batch ID access
- AckFlowControl consumers no longer incorrectly ack messages outside the consumer filter
- Consumer delivery counts will no longer underflow below zero
- Filestore improvements including block sync and inline compaction fixes
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