Changelog
Refer to the 2.11 Upgrade Guide for backwards compatibility notes with 2.10.x.
Go Version
- 1.24.2
Dependencies
Added
General
- Support for a default sentinel JWT, which is used in operator mode when none is specified, has been added making it possible to have default users (#6577)
- New
TraceHeaders
option to ensure that trace logging only emits headers and not message payloads (#6638)
JetStream
- Subject delete markers are now placed for messages that have aged out due to their TTL and not just because of the
MaxAge
policy (#6741)
Improved
General
- The publish permissions cache should now remain under the max allowed size more aggressively with improved pruning (#6674)
- It is now possible with service imports to import the same subject from multiple different accounts (#6704)
- Updating an account claim with a reduced max connection count no longer causes internal clients to be closed, fixing cases where JetStream assets could become unavailable (#6785)
GOMAXPROCS
andGOMEMLIMIT
are now reported in bothstatsz
andvarz
(#6791)- Improved
tls_timeout
configuration parsing consistency betweenauthorization
andtimeout
(#6731) - Allow servers with different pool sizes when using multiple routes, simplifying configuration changes and rolling updates (#6676)
JetStream
- Improved purge performance, particularly for KV
PurgeDeletes
calls, with optimised code paths for finding last sequences and reducing allocations (#6801) - Improved replicated asset creation performance by campaigning for group leadership more quickly (#6697)
- Improved the debug log message when resetting a group WAL after failing to truncate (#6705)
- Improved checking for streams that overlap with JS API or system subjects, so that badly-configured streams should not be able to break the API (#6786)
Fixed
General
- Fix a possible panic when a subject transform has missing tokens (#6612)
- Fix a possible panic when adding dedicated routes during a configuration reload (#6668)
- Data race when shutting down eventing has been resolved (#6620)
- A deadlock when updating account claims with service imports/exports has now been fixed (#6726)
- The
jsz
monitoring endpoint now correctly paginates withoffset
(#6794) - Parsing the
cluster_traffic
option at startup no longer results in a panic if the account has not loaded yet (#6733)
JetStream
- Fix clustered consumer consistency problems by waiting for delivered state to reach quorum before delivering new messages, resolving issues where acknowledged messages could be redelivered after a consumer leader change
- NOTE: This may negatively impact the throughput of replicated consumers. R1 consumers, consumers with
AckNone
ack policy and ordered consumers are not affected and may be more suitable for high-speed processing
- NOTE: This may negatively impact the throughput of replicated consumers. R1 consumers, consumers with
- JetStream is no longer incorrectly disabled when specifying
--js
and--store_dir
on the command line and then issuing a configuration reload (#6609) - Correctly remove messages from an interest-based stream when using
AckAll
consumers (#6587) - Preserve the first sequence when rebuilding state due to invalid checksums with no remaining messages (#6647)
- When recovering from disk, ignore temporary files that can be created during stream compression so that the same blocks do not get loaded more than once (#6684)
- Do not incorrectly reset group WALs when a new leader sends matching term information after a snapshot (#6691)
- Corrected a regression in the memory store when purging, aligning it with the filestore behaviour (#6714)
- When issuing a peer remove on a stream, the new peer set is now proposed through the NRG layer, potentially avoiding a drift in peers (#6720)
- When issuing a peer remove on a consumer, the new peer set is now proposed through the NRG layer, potentially avoiding a drift in peers (#6727)
- A race condition that could result in observer nodes becoming incorrectly elected as a group leader has been fixed when using leafnodes with shared system accounts (#6730)
- Ensure that duplicate Raft groups are not created for the same asset during a restart (#6732)
- Allow the use of the extended consumer create API when combining service imports/exports and limited API permissions (#6759)
- Streams with the
FirstSeq
configured are no longer incorrectly purged after a restart if the stream first sequence still matches the configured first sequence (#6753) - Correctly write tombstones when purging and compacting, fixing a bug that could result in some deleted messages returning if the stream index had to be rebuilt (#6685)
- The memory store no longer leaks memory tracking deleted sequences after a full stream purge (#6769)
- Correctly handle acks for subjects that include a
@
character (#6777) - Avoid losing stream sequence numbers of the server is interrupted by generating a new last message block before removing the final remaining block, particularly noticeable with WQ or interest retention policies (#6778)
- Use the correct floor when using
AckAll
in R1 consumers (#6790) - Preserve consumer state when a stream needs to be reset due to a failed catchup (#6796)
- Correctly enforce the 32MB maximum publish size limit into JetStream, avoiding filestore corruption from overflowing the maximum record length (#6798)
- Preserve the redelivered state if the consumer leader is placed on a server that is a lagging stream follower to keep accounting correct (#6698)
- Idempotent stream or consumer creations on a server upgrade from 2.10.x will no longer fail due to metadata changes (#6716)
- Do not place rejected messages with invalid TTLs into the deduplication map if using
Nats-Msg-Id
(#6725) - Message TTLs are now recovered properly from multiple messages if the timed hash wheel state is lost or corrupted on disk (#6758)
- Consumer priority groups will no longer get stuck in a tight-loop if there are multiple requests from different clients but some are not receiving due to the priority policy (#6749)
- Subject delete markers are now replicated more reliably and are now retriable, improving consistency in clustered mode (#6776)
- Tombstones are now correctly written for messages that have aged out due to their TTL, such that the deletion is preserved if the stream state is rebuilt (#6781)
- Corrected an off-by-one error that could cause the TTL state to be rebuilt unnecessarily on a server restart (#6679)
- Fixed a race condition in the timed hash wheel that could result in an underflow of the hash count (#6787)
Gateways
- Fixed a bug that could result in a lost queue subscriptions on gateway connections after a restart or a remote unsubscribe (#6607)