Releases: nats-io/nats-server
Release list
Release v2.15.0-RC.1
Changelog
This release also contains all changes up to and including v2.14.6.
Go Version
- 1.27.1 (#8551)
Added
JetStream
- Desired state metalayer (#8432, #8437, #8439, #8443, #8452, #8460, #8476, #8576)
- A new desired state reconciliation engine for streams and consumers considerably improves the safety and reliability of asset moves and scales
- Updating the placement or replication factor midway through an existing scale/move operation, cancelling an in-flight scale/move, or peer-removing is now much safer
- Cancel stream move endpoint (#8476)
- An in-flight scale/move operation on a stream can be cancelled and the asset returned to its original placement using the new
$JS.API.STREAM.CANCEL_MOVEendpoint
- An in-flight scale/move operation on a stream can be cancelled and the asset returned to its original placement using the new
- Evacuate endpoints (#8443)
- The new
$JS.API.SERVER.EVACUATEendpoint can safely evacuate streams, and any consumers on those streams, from a node - The new
$JS.API.STREAM.PEER.EVACUATE.*endpoint can safely evacuate a peer, and any consumers on that peer, from a stream - These operations combined allow for maintenance operations with full transfer of data and state without having to peer-remove first
- The new
- Metalayer rescue for disaster recovery (#8408)
- The new
$JS.API.META.RESCUEendpoint can temporarily lower the quorum-needed for the metalayer, in order to facilitate the recovery of a system where nodes have been permanently lost and the metalayer cannot reach quorum
- The new
- Stream backup and restore v2 (#7882)
- A new backup format for stream snapshots which reads out per-message rather than per-block
- The new backup format also now correctly includes non-replicated consumers on follower nodes
- Detect source stream recreation (#8384)
- The server now detects a source stream being recreated, restarting the sourcing back from the beginning, ensuring new messages are sourced
- Stream source indexing (#8282, #8516, #8283)
- Restarts and leader changes previously required expensive backward scans through the stream to find the last sourced indices. These are now persisted in an index for instant lookup.
- Domain-prefixed JS API in system account (#8429)
- When a system account is bridged between the hub and a leaf node, the domain-prefixed JS API can now be used to operate on the leaf node while directly connected to the hub
Changed
JetStream
- Streams now have a default limit of 1000 consumers, unless
max_consumersis specified in the stream config or account limits (#8337, #8566)- Applications planning to use a large number of consumers on a stream should configure
max_consumersin the stream config or account limits to an appropriately high number - The server-wide default of 1000 can be overridden by setting
default_max_consumersin the JetStream limits, or can be disabled by setting to-1 - This limit does not affect existing consumers and will not result in consumer deletions, only the creation of new consumers is prevented
- Applications planning to use a large number of consumers on a stream should configure
- Sync changes for replicated streams (#8447)
- When the
sync_intervalis set toalways, replicated streams now sync their WAL entries but no longer sync upper stream layer writes - The synced log allows the stream to recover safely, but removing unnecessary syncs from the upper stream layer dramatically improves performance
- Non-replicated R1 streams are not affected by this change and will continue to sync at the stream layer as normal
- When the
- The
js_raft_delete_rangefeature is now enabled by default (#8520)
Leafnodes
- The
no_advertiseoption no longer includes the hub's own listener address (#8451)
Improved
JetStream
- Shorter wait for durable source/mirror consumer resets (#8323)
- When using durable consumers for sourcing or mirroring, the heartbeats now short-circuit the recreation backoff
Fixed
Leafnodes
- Leafnode isolation using
request_isolation, or with hub-enforcedisolate, now works correctly across cluster nodes (#8504)
Complete Changes
Release v2.14.6
Changelog
Refer to the 2.14 Upgrade Guide 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)
AckFlowControlconsumers from a work queue stream will no longer incorrectly ack messages outside of the consumer filter (#8431, #8528)
Complete Changes
Release v2.14.6-RC.2
Changelog
Refer to the 2.14 Upgrade Guide for backwards compatibility notes with 2.12.x. Please note that the 2.13.x version was skipped.
Go Version
- 1.26.7
Improved
JetStream
- Reduced the number of heap escapes in subject tree matching (#8526)
Fixed
JetStream
- 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)
Complete Changes
Release v2.14.6-RC.1
Changelog
Refer to the 2.14 Upgrade Guide 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)
Fixed
General
- WebSocket client buffers are recycled more aggressively when reallocating into larger buffers (#8518)
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)
Complete Changes
Release v2.15.0-preview.1
Changelog
Important
This is a preview release for the upcoming 2.15 series. This is not a formal release candidate and is still undergoing testing, but we would welcome feedback.
This release also contains all changes up to and including v2.14.5.
Go Version
- 1.27.0
Added
JetStream
- Desired state metalayer (#8432, #8437, #8439, #8443, #8452, #8460, #8476)
- A new desired state reconciliation engine for streams and consumers considerably improves the safety and reliability of asset moves and scales
- Updating the placement or replication factor midway through an existing scale/move operation, cancelling an in-flight scale/move, or peer-removing is now much safer
- Cancel stream move endpoint (#8476)
- An in-flight scale/move operation on a stream can be cancelled and the asset returned to its original placement using the new
$JS.API.STREAM.CANCEL_MOVEendpoint
- An in-flight scale/move operation on a stream can be cancelled and the asset returned to its original placement using the new
- Evacuate endpoints (#8443)
- The new
$JS.API.SERVER.EVACUATEendpoint can safely evacuate streams, and any consumers on those streams, from a node - The new
$JS.API.STREAM.PEER.EVACUATE.*endpoint can safely evacuate a peer, and any consumers on that peer, from a stream - These operations combined allow for maintenance operations with full transfer of data and state without having to peer-remove first
- The new
- Metalayer rescue for disaster recovery (#8408)
- The new
$JS.API.META.RESCUEendpoint can temporarily lower the quorum-needed for the metalayer, in order to facilitate the recovery of a system where nodes have been permanently lost and the metalayer cannot reach quorum
- The new
- Stream backup and restore v2 (#7882)
- A new backup format for stream snapshots which reads out per-message rather than per-block
- The new backup format also now correctly includes non-replicated consumers on follower nodes
- Detect source stream recreation (#8384)
- The server now detects a source stream being recreated, restarting the sourcing back from the beginning, ensuring new messages are sourced
- Stream source indexing (#8282)
- Restarts and leader changes previously required expensive backward scans through the stream to find the last sourced indices. These are now persisted in an index for instant lookup.
- Domain-prefixed JS API in system account (#8429)
- When a system account is bridged between the hub and a leaf node, the domain-prefixed JS API can now be used to operate on the leaf node while directly connected to the hub
Changed
JetStream
- Sync changes for replicated streams (#8447)
- When the
sync_intervalis set toalways, replicated streams now sync their WAL entries but no longer sync upper stream layer writes - The synced log allows the stream to recover safely, but removing unnecessary syncs from the upper stream layer dramatically improves performance
- Non-replicated R1 streams are not affected by this change and will continue to sync at the stream layer as normal
- When the
Improved
JetStream
- Shorter wait for durable source/mirror consumer resets (#8323)
- When using durable consumers for sourcing or mirroring, the heartbeats now short-circuit the recreation backoff
Complete Changes
Release v2.14.5
Changelog
Refer to the 2.14 Upgrade Guide for backwards compatibility notes with 2.12.x. Please note that the 2.13.x version was skipped.
Go Version
- 1.26.5
Dependencies
Added
Leafnodes
- New
dial_timeoutoption can be specified in theleafnodeconfig block or for specific remotes in the configuration, allowing it to be increased above the default 1 second for high-latency links (#8427)
Fixed
General
- Fixed a deadlock that could occur in the logger when a close error occurs (#8430)
JetStream
- Fix a bug that could result in potential data loss when handling idempotent stream creates when an offline node catches up from a metalayer snapshot, caused by an incorrect update to the create time in the stream assignment (#8449)
Complete Changes
Release v2.12.15
Changelog
Go Version
- 1.25.12
Dependencies
Fixed
General
- Fixed a deadlock that could occur in the logger when a close error occurs (#8430)
JetStream
- Fix a bug that could result in potential data loss when handling idempotent stream creates when an offline node catches up from a metalayer snapshot, caused by an incorrect update to the create time in the stream assignment (#8449)
Complete Changes
Release v2.14.4
Changelog
Refer to the 2.14 Upgrade Guide for backwards compatibility notes with 2.12.x. Please note that the 2.13.x version was skipped.
Go Version
- 1.26.5 (#8435)
Dependencies
- github.com/klauspost/compress v1.19.0 (#8385)
- golang.org/x/crypto v0.54.0 (#8385)
- golang.org/x/sys v0.47.0 (#8385)
- github.com/antithesishq/antithesis-sdk-go v0.7.2-default-no-op (#8385)
Improved
JetStream
- The Raft transport layer has been decoupled, improves testing but does not change server behaviour (#8181)
- The disk concurrency semaphore has been increased to 4096 slots, up from the previous CPU-scaled count (#8336)
- The disk concurrency semaphore can now be configured with the
max_concurrent_iooption in thejetstreamconfig block (#8336) - Filestore underlying block cache buffers are now recycled to the pool when the weak reference is collected by the GC, which should smooth out memory usage with some usage patterns (#8395)
- Calculating and looking up sequences in delete maps for file-backed streams with large numbers of interior deletes is now faster and holds locks for less time (#8403)
- Inserts, iterations and deletes in AVL sequence sets are now faster in many cases, which speeds up the tracking of interior deletes (#8406)
- Stream snapshots now attempt to determine the correct encode buffer size up front, avoiding many unnecessary allocations on streams with large numbers of interior deletes (#8405)
- Reduced memory usage of the structure that is used to track subjects within a stream (#8412)
Fixed
General
allow_non_tlswill no longer log an incorrect message at startup claiming that TLS is required (#8420)- Combining
no_auth_userwith auth callouts will no longer skip authentication checks when noCONNECTmessage is sent - JWT validation no longer crashes the server with whitespace-only permissions
- Several paths that enforce the permissions of queue subscriptions no longer treat the whole permission as a subject literal
- Several JetStream and MQTT endpoints now correctly guard against null values in JSON
- Fixed an authentication bypass with TLS
verify_and_mapauthenticating users with blank passwords
Monitoring
- The
healthzendpoint will now skip and no longer report on expired JWT accounts (#8379, thanks to @ByapakSigdel) - The
varzendpoint will now correctly report JetStream limits after they were changed via a config reload (#8394)
JetStream
- Malformed cluster replicated acks or delivered updates are now correctly rejected by the decoder (#8284, thanks to @uwezkhan)
- Malformed cluster replicated skip or reset updates are now correctly rejected by the decoder (#8345, thanks to @uwezkhan)
- Empty cluster replicated entries are now correctly ignored (#8347, thanks to @uwezkhan)
- Decoded AVL sequence set node counts are now validated correctly on 32-bit systems (#8355, thanks to @uwezkhan)
- Stale error responses on source or mirror creation are now dropped by recreating the subscription (#8356)
- Oversized cluster replicated messages are now validated correctly on 32-bit systems (#8357, thanks to @uwezkhan)
- Raft elections now correctly ignore votes from removed peers (#8353)
- Filestore blocks with unsynced or truncated key files are now removed and counted as lost data instead of failing to recover altogether (#8365)
- Filestore encryption key files are now synced to disk more aggressively (#8366)
- Raft now handles the append entry iterator returning no more entries correctly (#8372)
- Fixed string ownership when handling the expected last sequence per subject in a batch (#8377)
- Fixed a race condition between concurrent message removals via limits that could unexpectedly disable writes into a filestore (#8378)
- Fixed a bug in the filestore which could prevent some filestore block cache references from being weakened correctly, which could result in unexpected memory usage and GC pressure (#8380)
- Attempting to update the consumer storage type now correctly returns an error (#8382)
- Stream publish checks will now correctly reject messages that exceed the maximum store size before proposal (#8389)
- Fixed a race condition between storing messages in the filestore and block compactions (#8400)
- The filestore no longer skips sparse delete blocks when processing deletes from a snapshot (#8404)
- The consumer reset endpoint responses are no longer dropped when sent through a service import (#8407)
- Creating a clustered consumer immediately after creating a clustered stream should no longer respond with a
stream not founderror (#8410) - Raft proposals now require the term to be passed down from JetStream, preventing situations where stale proposals from a previous term could make changes in a new term after a fast election (#8370)
- Replicated streams that were recreated while a node was down are no longer treated as an update by a returning node processing a snapshot, avoiding stale Raft groups from continuing to run and unexpected behaviour with consumers (#8413)
- Stream snapshot endpoints now more strictly check the reply subject for validity
MQTT
- Packet identifiers for QoS1 and QoS2 are now issued by a monotonic counter, avoiding accidental ID reuse (#8358, thanks to @nberlee)
- Pending QoS1 and QoS2 deliveries should no longer leak when the subscription is downgraded to QoS0 (#8359, thanks to @nberlee)
- QoS2 messages released on a resumed sessions should no longer lose their QoS or packet ID (#8414)
- MQTT clients can no longer subscribe to
$MQTT.>subjects, closing a potential permission bypass
Complete Changes
Release v2.12.14
Changelog
Go Version
- 1.25.12 (#8435)
Dependencies
- github.com/klauspost/compress v1.19.0 (#8385)
- golang.org/x/crypto v0.54.0 (#8385)
- golang.org/x/sys v0.47.0 (#8385)
- github.com/antithesishq/antithesis-sdk-go v0.7.2-default-no-op (#8385)
Improved
JetStream
- The Raft transport layer has been decoupled, improves testing but does not change server behaviour (#8181)
- The disk concurrency semaphore has been increased to 4096 slots, up from the previous CPU-scaled count (#8336)
- The disk concurrency semaphore can now be configured with the
max_concurrent_iooption in thejetstreamconfig block (#8336) - Filestore underlying block cache buffers are now recycled to the pool when the weak reference is collected by the GC, which should smooth out memory usage with some usage patterns (#8395)
- Inserts, iterations and deletes in AVL sequence sets are now faster in many cases, which speeds up the tracking of interior deletes (#8406)
- Stream snapshots now attempt to determine the correct encode buffer size up front, avoiding many unnecessary allocations on streams with large numbers of interior deletes (#8405)
- Reduced memory usage of the structure that is used to track subjects within a stream (#8412)
Fixed
General
allow_non_tlswill no longer log an incorrect message at startup claiming that TLS is required (#8420)- Combining
no_auth_userwith auth callouts will no longer skip authentication checks when noCONNECTmessage is sent - JWT validation no longer crashes the server with whitespace-only permissions
- Several paths that enforce the permissions of queue subscriptions no longer treat the whole permission as a subject literal
- Several JetStream and MQTT endpoints now correctly guard against null values in JSON
- Fixed an authentication bypass with TLS
verify_and_mapauthenticating users with blank passwords
Monitoring
- The
healthzendpoint will now skip and no longer report on expired JWT accounts (#8379, thanks to @ByapakSigdel) - The
varzendpoint will now correctly report JetStream limits after they were changed via a config reload (#8394)
JetStream
- Malformed cluster replicated acks or delivered updates are now correctly rejected by the decoder (#8284, thanks to @uwezkhan)
- Malformed cluster replicated skip or reset updates are now correctly rejected by the decoder (#8345, thanks to @uwezkhan)
- Empty cluster replicated entries are now correctly ignored (#8347, thanks to @uwezkhan)
- Decoded AVL sequence set node counts are now validated correctly on 32-bit systems (#8355, thanks to @uwezkhan)
- Oversized cluster replicated messages are now validated correctly on 32-bit systems (#8357, thanks to @uwezkhan)
- Raft elections now correctly ignore votes from removed peers (#8353)
- Filestore encryption key files are now synced to disk more aggressively (#8366)
- Raft now handles the append entry iterator returning no more entries correctly (#8372)
- Fixed a bug in the filestore which could prevent some filestore block cache references from being weakened correctly, which could result in unexpected memory usage and GC pressure (#8380)
- Attempting to update the consumer storage type now correctly returns an error (#8382)
- Stream publish checks will now correctly reject messages that exceed the maximum store size before proposal (#8389)
- Creating a clustered consumer immediately after creating a clustered stream should no longer respond with a
stream not founderror (#8410) - Replicated streams that were recreated while a node was down are no longer treated as an update by a returning node processing a snapshot, avoiding stale Raft groups from continuing to run and unexpected behaviour with consumers (#8413)
- Stream snapshot endpoints now more strictly check the reply subject for validity
MQTT
- Packet identifiers for QoS1 and QoS2 are now issued by a monotonic counter, avoiding accidental ID reuse (#8358, thanks to @nberlee)
- Pending QoS1 and QoS2 deliveries should no longer leak when the subscription is downgraded to QoS0 (#8359, thanks to @nberlee)
- QoS2 messages released on a resumed sessions should no longer lose their QoS or packet ID (#8414)
Complete Changes
Release v2.14.3
Changelog
Refer to the 2.14 Upgrade Guide for backwards compatibility notes with 2.12.x. Please note that the 2.13.x version was skipped.
Go Version
- 1.26.4 (#8281)
Dependencies
- golang.org/x/crypto v0.53.0 (#8297)
- golang.org/x/sys v0.46.0 (#8297)
- github.com/nats-io/jwt/v2 v2.8.2
- github.com/nats-io/nkeys v0.4.16
Improved
General
- Per-connection log lines that could be noisy in normal operation have been demoted to debug level (#8289)
- Writer options are now applied consistently when using the
s2_fastcompression mode (#8047)
JetStream
- Stream and consumer assignment handling has been refactored for more consistent migration and info behavior (#8262)
- Meta, stream and consumer write errors are now registered more consistently for health and recovery handling (#8293)
Removed
Monitoring
- JSONP callback support has been removed from monitoring endpoints
Fixed
General
- Long-running reconnect and OCSP loops no longer retain unused timers, reducing memory pressure over time (#8204)
- Inherited JWT default permissions are now refreshed when account claims are updated (#8276)
- External auth configuration is now cleared correctly when account claims are updated (#8275)
- PROXY protocol detection, TLS sniffing with
allow_non_tlsand PROXY v1 address-family parsing have been fixed (#8302) - A race in gateway
CONNECThandling has been fixed (#8306) - Trusted proxy tracking no longer leaks closed clients during concurrent updates (#8307)
- Service import replies can now be delivered across cluster routes (#8317)
- Message tracing now works correctly with service imports and exports
- Several panic, fatal and data race conditions in authentication, routing, monitoring and clustered request handling have been fixed
NoAuthUsernow checks connection restrictions- Leaf connections no longer bypass
Nats-Trace-Destpublish permission checks CONNZandSUBSZpagination now guard againstOffsetandLimitinteger overflow panics- Fixed a nil pointer panic when starting up when the resolver parent directory is missing (#8329)
MQTT
- Partial
CONNECTpackets can no longer exhaust pre-authentication memory PUBLISHremaining-length underflow no longer causes a server panic- Subscriptions to internal
$MQTT.deliver.pubrelsubjects are now rejected - Subscribe deny rules are now enforced on retained message and QoS replay paths
- WebSocket
/mqttupgrades no longer panic when MQTT is disabled
Monitoring
- JetStream remote usage updates no longer panic on length integer overflow
JetStream
- A data race on the cluster meta node during JetStream shutdown has been fixed (#8260)
- Meta proposal inflight tracking is now kept consistent during stream moves and related operations (#8261)
- Stream catchup is no longer skipped when limits are exceeded, preventing possible stream desync (#8265)
- Malformed TTL and schedule state is now rejected during decode (#8269)
- Zero consumer limits are now treated as unlimited during stream updates (#8286)
- Raft nodes no longer participate in voting or candidacy after write errors (#8290)
- Raft checkpoint handling now aborts if the node is closed (#8296)
- Raft
ApplyCommitnow handles the post-snapshot index correctly (#8321) - Consumer ack subscriptions now match correctly when consumer names contain
%(#8301) - Observer state is now cleared correctly during
js_cluster_migratewhen a leaf remote is removed (#8304) - Atomic batch end-of-batch max-size checks and R1 message rewrites have been fixed (#8305)
- Schedule drift, failed fast batch commits with
gapOkand stale/varzleaf remote state have been fixed (#8308) - Peer state decoding now bounds peer ID reads to the buffer length (#8310)
- Counter stream staging no longer corrupts the committed running total (#8311)
- Filestore compaction no longer corrupts compressed or encrypted blocks (#8312)
- Memory store
NumPendingno longer overcounts forDeliverLastPerSubjectconsumers (#8313) - Consumer inactive-delete grace period handling and pull request
MaxBytesbudgeting have been fixed (#8314) MultiLastSeqsno longer reorders stream config subjects throughfilterIsAllhandling (#8315)- Meta recovery snapshots no longer leave phantom streams or consumers behind (#8324)
- Skipped messages last time no longer violates ordering that could lead to issues with starting by time (#8237)
- Raft now reverts uncommitted membership changes correctly when truncating or snapshotting (#8332)
Credits
While CVE advisory notices are credited individually, a number of fixes in this release were the result of non-CVE reports from the following contributors:
- Koda Reef
- @Emin-ACIKGOZ
- @0xVijay
- Yaohui Wang
- @alanturing881