Skip to content

Releases: nats-io/nats-server

Release v2.15.1-RC.2

Release v2.15.1-RC.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Oct 10:57
v2.15.1-RC.2
d564fd6

Changelog

Refer to the 2.15 Upgrade Guide for backwards compatibility notes with 2.14.x.

Go Version

  • 1.27.1

Improved

JetStream

  • Fast batch publish now reports backward sequence gaps as well as forward gaps (#8699)
  • Stream pending message calculations avoid unnecessary filestore cache access and handle deleted sequence ranges more efficiently (#8680, #8681)
  • Stream restore format detection now stops after the first S2 chunk (#8693)
  • Stream restore waits for the preferred node to become leader, avoiding an incorrect create response during clustered restore (#8690)
  • Memory backed streams avoid copying message headers and bodies twice when storing messages (#8652)

Monitoring

  • Leafz now reports whether a leafnode connection uses WebSockets (#8683)

MQTT

  • Partial packets are no longer copied in full on every read, reducing allocations and buffer copying (#8692)

Fixed

General

  • Fixed several data races affecting service imports and exports during configuration reloads and account updates (#8675)
  • Per-account routes no longer double count inbound account message and byte statistics (#8677)
  • TLS certificate pin validation now checks the correct pins after a configuration reload (#8679)
  • Auth callout rejections are now reported as authentication errors instead of account connection limit errors (#8688)
  • Scoped ProxyRequired settings are now respected in JWTs and auth callouts (#8694)
  • Subscription interest notifications are no longer missed when a subscription is added or removed concurrently (#8703)
  • Fast batch ping no longer starts a new batch incorrectly (#8714)

Leafnodes

  • TLS state is now available to auth callouts when leafnodes connect over WebSockets (#8686)
  • Leafnode clients are now shed alongside regular clients during lame duck shutdown, avoiding a thundering herd (#8695)
  • Remote proxies now support TLS with https:// proxy URLs and an optional proxy tls block (#8701)
  • Remote proxies no longer incorrectly warn that nats:// URLs are unsupported or lose the hub's initial INFO message (#8701)
  • Remote proxy options are now rejected when no proxy URL is specified (#8701)

JetStream

  • Fixed membership change, learner scale-up and metalayer commit recovery issues (#8672)
  • Fixed migration and R1 scale-up issues that could delete a running store or lose writes (#8673)
  • Recreated streams with renamed Raft groups now start their monitors correctly (#8673)
  • Consumers are no longer moved to new stream peers before those peers hold the stream data (#8678)
  • Failed clustered stream restores now clean up correctly without deleting a subsequently recreated stream or losing a stream rm response (#8702)
  • Fixed a panic when shutting down a clustered JetStream server immediately after startup (#8707)
  • Idempotent stream create requests with sources no longer time out after leader changes (#8703)
  • Interest cleanup no longer compacts a stream past its last sequence during recovery (#8710)

MQTT

  • MQTT packet lengths are validated earlier against max_payload, and non-QoS 2 PUBREC packets are handled correctly (#8692)

Complete Changes

v2.15.1-RC.1...v2.15.1-RC.2

Release v2.14.8-RC.2

Release v2.14.8-RC.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Oct 10:56
v2.14.8-RC.2
dd2b2c5

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.8

Improved

JetStream

  • Fast batch publish now reports backward sequence gaps as well as forward gaps (#8699)
  • Stream pending message calculations avoid unnecessary filestore cache access and handle deleted sequence ranges more efficiently (#8680, #8681)
  • Stream restore waits for the preferred node to become leader, avoiding an incorrect create response during clustered restore (#8690)
  • Memory backed streams avoid copying message headers and bodies twice when storing messages (#8652)

Monitoring

  • Leafz now reports whether a leafnode connection uses WebSockets (#8683)

MQTT

  • Partial packets are no longer copied in full on every read, reducing allocations and buffer copying (#8692)

Fixed

General

  • Fixed several data races affecting service imports and exports during configuration reloads and account updates (#8675)
  • Per-account routes no longer double count inbound account message and byte statistics (#8677)
  • TLS certificate pin validation now checks the correct pins after a configuration reload (#8679)
  • Fast batch ping no longer starts a new batch incorrectly (#8714)
  • Auth callout rejections are now reported as authentication errors instead of account connection limit errors (#8688)
  • Scoped ProxyRequired settings are now respected in JWTs and auth callouts (#8694)
  • Subscription interest notifications are no longer missed when a subscription is added or removed concurrently (#8703)

Leafnodes

  • TLS state is now available to auth callouts when leafnodes connect over WebSockets (#8686)
  • Leafnode clients are now shed alongside regular clients during lame duck shutdown, avoiding a thundering herd (#8695)
  • Remote proxies now support TLS with https:// proxy URLs and an optional proxy tls block (#8701)
  • Remote proxies no longer incorrectly warn that nats:// URLs are unsupported or lose the hub's initial INFO message (#8701)
  • Remote proxy options are now rejected when no proxy URL is specified (#8701)

JetStream

  • Fixed a panic when shutting down a clustered JetStream server immediately after startup (#8707)
  • Idempotent stream create requests with sources no longer time out after leader changes (#8703)

MQTT

  • MQTT packet lengths are validated earlier against max_payload (#8692)

Complete Changes

v2.14.8-RC.1...v2.14.8-RC.2

Release v2.15.1-RC.1

Release v2.15.1-RC.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Sep 17:12
v2.15.1-RC.1
45e4740

Changelog

Refer to the 2.15 Upgrade Guide for backwards compatibility notes with 2.14.x.

Go Version

  • 1.27.1

Changed

JetStream

  • The max_ha_assets limit is now enforced consistently by the metalayer leader during stream and consumer placement, scaling and moves (#8639)

Gateways

  • Support for sending and handling the legacy $GR. reply prefix, used by servers prior to v2.1.2, has been removed (#8615)

Improved

JetStream

  • Stalled source and mirror flow control is now reported in stream info and warning logs, making missing $JS.FC.> imports or exports easier to diagnose (#8633)
  • Stream and consumer placement now prefers peers that have caught up with the metalayer, reducing delays in API responses (#8643)
  • Improved the performance of deleting entries from and encoding AVL sequence sets (#8646)

MQTT

  • QOS 2 PUBLISH and PUBREL processing is now pipelined for increased throughput (#8416, contributed by @levb)
  • Reduced allocations and buffer copying when processing QOS 1 and QOS 2 messages and issuing JetStream store and delete requests (#8624, #8625, contributed by @levb)

Fixed

General

  • Connz requests selecting a connection by cid now correctly apply account, user and MQTT client ID filters (#8613)
  • Pipelined client operations are no longer processed after a connection is rejected for exceeding the account's max_connections limit (#8614)
  • Queue subscription deny permissions are now checked against the mapped delivery subject (#8616)
  • Outstanding reply permissions are now preserved when inherited account permissions are refreshed without changing the response policy (#8620, contributed by @0xasritha)
  • Subscription deny filters are now rebuilt atomically when inherited account permissions are refreshed, preventing a window in which denied messages could be delivered (#8622, contributed by @0xasritha)
  • Unquoted configuration values beginning with a number and a size or exponent suffix, such as 0K1abc, are now correctly parsed as strings (#8263, contributed by @koriyoshi2041)
  • Account JWT updates now reject invalid subject mappings instead of reporting success, and failed replacements no longer remove existing mappings (#8627, contributed by @vulragrag-star)
  • Cached subscription results are now cleared when an already connected client sends another CONNECT, preventing stale results from being reused after an account change (#8641, reported by @Tan-JunWei)

JetStream

  • Stale per-message TTL entries are now removed when their messages have already been deleted, avoiding repeated expiry scans and excess CPU and memory usage (#8595, contributed by @digitalstraw)
  • The maximum deliveries exceeded advisory is now sent correctly when a consumer's max_deliver is lowered below a message's existing delivery count (#8605, contributed by @zeke-lin)
  • The consumer created time is now preserved after recovery (#8621)
  • Filestore compaction now respects the configured sync settings when replacing a message block (#8629)
  • Fixed a race during filestore compaction that could cause consumers to skip messages or lose redelivery tracking (#8623, contributed by @as-clearview)
  • Concurrent updates to R1 consumers no longer lose API responses (#8628)
  • Stream and consumer create and delete requests received during metalayer catchup now receive responses once catchup completes (#8643)
  • R1 consumer create requests no longer lose their responses when the consumer is deleted immediately afterwards (#8643)
  • Fixed a data race when handling consumer leader stepdown requests (#8647)
  • Clustered snapshots now use the correct generated names for ephemeral consumers, allowing backup validation and restore to succeed (#8651, contributed by @kris70lesgo)
  • Fixed a memory leak affecting pull requests and direct gets after a configuration reload when the system account is explicitly configured in the accounts block (#8650, contributed by @1995parham)

Leafnodes

  • Publish permissions are now checked against the transformed subject sent over the leafnode connection, avoiding the need to also allow the original stream import subject (#8530, contributed by @fbarth-ifr)
  • Fixed incorrect pending byte accounting after a partial compressed write that could stall a leafnode connection and prevent it from reconnecting (#8636)
  • Closed leafnode connections are now correctly removed from the account's leafnode list, reducing retained memory and garbage collection pressure (#8637)

Gateways

  • The legacy $GR. reply prefix is now reserved on client ingress, preventing clients from publishing to gateway reply subjects using that prefix (#8615)

MQTT

  • Config load no longer breaks QoS1/QoS2 delivery when max_ack_pending is unset (#8671)

Complete Changes

v2.15.0...v2.15.1-RC.1

Release v2.14.8-RC.1

Release v2.14.8-RC.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Sep 17:12
v2.14.8-RC.1
f574b42

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.8

Changed

Gateways

  • Support for sending and handling the legacy $GR. reply prefix, used by servers prior to v2.1.2, has been removed (#8615)

Improved

JetStream

  • Stalled source and mirror flow control is now reported in stream info and warning logs, making missing $JS.FC.> imports or exports easier to diagnose (#8633)
  • Stream and consumer placement now prefers peers that have caught up with the metalayer, reducing delays in API responses (#8643)
  • Improved the performance of deleting entries from and encoding AVL sequence sets (#8646)

Fixed

General

  • Concurrent account JWT updates no longer invalidate stream imports and interrupt message delivery (#8610)
  • Configuration reloads no longer incorrectly disconnect operator mode clients that send an nkey (#8609)
  • Connz requests selecting a connection by cid now correctly apply account, user and MQTT client ID filters (#8613)
  • Pipelined client operations are no longer processed after a connection is rejected for exceeding the account's max_connections limit (#8614)
  • Queue subscription deny permissions are now checked against the mapped delivery subject (#8616)
  • Outstanding reply permissions are now preserved when inherited account permissions are refreshed without changing the response policy (#8620, contributed by @0xasritha)
  • Subscription deny filters are now rebuilt atomically when inherited account permissions are refreshed, preventing a window in which denied messages could be delivered (#8622, contributed by @0xasritha)
  • Unquoted configuration values beginning with a number and a size or exponent suffix, such as 0K1abc, are now correctly parsed as strings (#8263, contributed by @koriyoshi2041)
  • Account JWT updates now reject invalid subject mappings instead of reporting success, and failed replacements no longer remove existing mappings (#8627, contributed by @vulragrag-star)
  • Cached subscription results are now cleared when an already connected client sends another CONNECT, preventing stale results from being reused after an account change (#8641, reported by @Tan-JunWei)

JetStream

  • Stream scale-down requests are now rejected when the target replica count has no configured account tier (#8608)
  • Stale per-message TTL entries are now removed when their messages have already been deleted, avoiding repeated expiry scans and excess CPU and memory usage (#8595, contributed by @digitalstraw)
  • The maximum deliveries exceeded advisory is now sent correctly when a consumer's max_deliver is lowered below a message's existing delivery count (#8605, contributed by @zeke-lin)
  • The consumer created time is now preserved after recovery (#8621)
  • Filestore compaction now respects the configured sync settings when replacing a message block (#8629)
  • Fixed a race during filestore compaction that could cause consumers to skip messages or lose redelivery tracking (#8623, contributed by @as-clearview)
  • Concurrent updates to R1 consumers no longer lose API responses (#8628)
  • Stream and consumer create and delete requests received during metalayer catchup now receive responses once catchup completes (#8643)
  • R1 consumer create requests no longer lose their responses when the consumer is deleted immediately afterwards (#8643)
  • Fixed a data race when handling consumer leader stepdown requests (#8647)
  • Fixed a memory leak affecting pull requests and direct gets after a configuration reload when the system account is explicitly configured in the accounts block (#8650, contributed by @1995parham)

Leafnodes

  • Publish permissions are now checked against the transformed subject sent over the leafnode connection, avoiding the need to also allow the original stream import subject (#8530, contributed by @fbarth-ifr)
  • Fixed incorrect pending byte accounting after a partial compressed write that could stall a leafnode connection and prevent it from reconnecting (#8636)
  • Closed leafnode connections are now correctly removed from the account's leafnode list, reducing retained memory and garbage collection pressure (#8637)

Gateways

  • The legacy $GR. reply prefix is now reserved on client ingress, preventing clients from publishing to gateway reply subjects using that prefix (#8615)

MQTT

  • Config load no longer breaks QoS1/QoS2 delivery when max_ack_pending is unset (#8671)

Complete Changes

v2.14.7...v2.14.8-RC.1

Release v2.15.0

Choose a tag to compare

@github-actions github-actions released this 17 Sep 13:30
v2.15.0
eb76367

Changelog

Refer to the 2.15 Upgrade Guide for backwards compatibility notes with 2.14.x. This release also contains all changes up to and including v2.14.7.

Go Version

Added

JetStream

  • Desired state metalayer (#8432, #8437, #8439, #8443, #8452, #8460, #8476, #8576, #8598, #8602, #8603)
  • Cancel stream move endpoint (#8476)
  • Evacuate endpoints (#8443)
    • The new $JS.API.SERVER.EVACUATE endpoint 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
    • ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-62.md
  • Metalayer rescue for disaster recovery (#8408)
  • Stream backup and restore v2 (#7882, #8584, #8591, #8604)
  • 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_consumers is 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_consumers in the stream config or account limits to an appropriately high number
    • The server-wide default of 1000 can be overridden by setting default_max_consumers in 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
  • Sync changes for replicated streams (#8447)
    • When the sync_interval is set to always, 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
  • The js_raft_delete_range feature is now enabled by default (#8520)

Leafnodes

  • The no_advertise option no longer includes the hub's own listener address (#8451, contributed by @freakes)

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
  • An atomic batch for a single-replica stream run with sync: always now syncs messages as a group (#8539, contributed by @RainyPixel)
  • JetStream source/mirror reply subjects can now opt-in to be domain/account aware (#8586, contributed by @ayushk-1801)

MQTT

  • QOS 1 published into JetStream are pipelined for increased throughput (#8415, contributed by @levb)

Fixed

Leafnodes

  • Leafnode isolation using request_isolation, or with hub-enforced isolate, now works correctly across cluster nodes (#8504)

Complete Changes

v2.14.7...v2.15.0

Release v2.15.0-RC.2

Release v2.15.0-RC.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Sep 16:27
v2.15.0-RC.2
69ebb4d

Changelog

This release also contains all changes up to and including v2.14.7.

Go Version

Added

JetStream

  • Desired state metalayer (#8432, #8437, #8439, #8443, #8452, #8460, #8476, #8576, #8598, #8602)
    • 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_MOVE endpoint
  • Evacuate endpoints (#8443)
    • The new $JS.API.SERVER.EVACUATE endpoint 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
  • Metalayer rescue for disaster recovery (#8408)
    • The new $JS.API.META.RESCUE endpoint 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
  • Stream backup and restore v2 (#7882, #8584, #8591)
    • 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_consumers is 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_consumers in the stream config or account limits to an appropriately high number
    • The server-wide default of 1000 can be overridden by setting default_max_consumers in 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
  • Sync changes for replicated streams (#8447)
    • When the sync_interval is set to always, 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
  • The js_raft_delete_range feature is now enabled by default (#8520)

Leafnodes

  • The no_advertise option 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-enforced isolate, now works correctly across cluster nodes (#8504)

Complete Changes

v2.15.0-RC.1...v2.15.0-RC.2

Release v2.14.7

Choose a tag to compare

@github-actions github-actions released this 15 Sep 15:10
v2.14.7
8d8b69a

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

Dependencies

  • github.com/antithesishq/antithesis-sdk-go v0.8.0-default-no-op (#8562)
  • github.com/klauspost/compress v1.20.0 (#8562)
  • golang.org/x/crypto v0.57.0 (#8597)
  • golang.org/x/sys v0.48.0 (#8597)
  • golang.org/x/time v0.16.0 (#8597)

Added

JetStream

  • Compatibility for the new desired state metalayer, introduced in v2.15, to support safe upgrades and downgrades (#8554)

Improved

General

  • The fastrand and math/rand packages have been replaced with math/rand/v2 (#8538, #8557)
  • Reduced lock contention that could arise from tracking event IDs or closed connections (#8533)

JetStream

  • When syncing deletes from a snapshot, block removals are now aggregated, reducing pending calculations (#8545)
  • Message size checks are now performed before more expensive header checks (#8561)
  • Pending calculations are now considerably faster when the max messages per subject limit is 1 (#8567)

Fixed

General

  • The {{left}} and {{right}} mapping functions now work correctly in account mappings and source/mirror transforms (#8568)

JetStream

  • A potential underflow when calculating deletes in skip messages has been fixed (#8546)
  • Fixed an issue where catchup signals to the metalayer are blocked, which could stall stream or cluster management operations until the node is restarted (#8555)
  • Consumer removal is now handled correctly after a recreate during metalayer recovery at startup (#8556)
  • Fixed a potential panic that could happen when filestore block caches were released during message removal (#8548)
  • The last dedupe message ID is now restored correctly if the last message was outside of the window after restart (#8564)
  • An unreachable send snapshot condition has been removed from the stream monitor (#8565)
  • Pull request expiry is now counted as activity when inactive_threshold is set (#8575)
  • Purges and roll-ups on multi-filter subject consumers will no longer advance past unrelated subjects (#8572)
  • Filestore compression header checking is now extended to check for compatible compression values and for the presence of correct or incorrect first record checksums, avoiding collisions at the beginning of a message block (#8581)
  • JetStream usage from peer-removed nodes is now removed from the remaining cluster node accounting correctly (#8570)
  • Fixed a data race between deduplication tracking and stream config updates (#8598)
  • Fixed a potential nil consumer info when responding to consumer reset requests (#8598)
  • Stream catchups will no longer run for removed or re-synced peers (#8598)
  • Fixed a race condition that could leave ghost consumer assignments when deleting consumers (#8598)
  • Pausing a consumer with pending changes no longer cancels out the in-flight assignment (#8598)
  • Stepping down a consumer leader with pending changes no longer fails (#8598)
  • Switching a stream to interest retention policy with no consumers now correctly cleans up messages with no interest (#8598)
  • Fixed an issue where removed consumers were incorrectly matched without checking the group name (#8598)
  • A number of stream and consumer endpoints will no longer report the wrong state based on in-flight proposals (#8598)

Complete Changes

v2.14.6...v2.14.7

Release v2.14.7-RC.2

Release v2.14.7-RC.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 14 Sep 15:48
v2.14.7-RC.2
6b557bd

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.8

Dependencies

  • golang.org/x/crypto v0.57.0 (#8597)
  • golang.org/x/sys v0.48.0 (#8597)
  • golang.org/x/time v0.16.0 (#8597)

Fixed

JetStream

  • Fixed a data race between deduplication tracking and stream config updates (#8598)
  • Fixed a potential nil consumer info when responding to consumer reset requests (#8598)
  • Stream catchups will no longer run for removed or re-synced peers (#8598)
  • Fixed a race condition that could leave ghost consumer assignments when deleting consumers (#8598)
  • Pausing a consumer with pending changes no longer cancels out the in-flight assignment (#8598)
  • Stepping down a consumer leader with pending changes no longer fails (#8598)
  • Switching a stream to interest retention policy with no consumers now correctly cleans up messages with no interest (#8598)
  • Fixed an issue where removed consumers were incorrectly matched without checking the group name (#8598)
  • A number of stream and consumer endpoints will no longer report the wrong state based on in-flight proposals (#8598)

Complete Changes

v2.14.7-RC.1...v2.14.7-RC.2

Release v2.14.7-RC.1

Release v2.14.7-RC.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 10 Sep 16:05
v2.14.7-RC.1
532fa99

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

Dependencies

  • github.com/antithesishq/antithesis-sdk-go v0.8.0-default-no-op (#8562)
  • github.com/klauspost/compress v1.20.0 (#8562)
  • golang.org/x/crypto v0.56.0 (#8562)

Added

JetStream

  • Compatibility for the new desired state metalayer, introduced in v2.15, to support safe upgrades and downgrades (#8554)

Improved

General

  • The fastrand and math/rand packages have been replaced with math/rand/v2 (#8538, #8557)
  • Reduced lock contention that could arise from tracking event IDs or closed connections (#8533)

JetStream

  • When syncing deletes from a snapshot, block removals are now aggregated, reducing pending calculations (#8545)
  • Message size checks are now performed before more expensive header checks (#8561)
  • Pending calculations are now considerably faster when the max messages per subject limit is 1 (#8567)

Fixed

General

  • The {{left}} and {{right}} mapping functions now work correctly in account mappings and source/mirror transforms (#8568)

JetStream

  • A potential underflow when calculating deletes in skip messages has been fixed (#8546)
  • Fixed an issue where catchup signals to the metalayer are blocked, which could stall stream or cluster management operations until the node is restarted (#8555)
  • Consumer removal is now handled correctly after a recreate during metalayer recovery at startup (#8556)
  • Fixed a potential panic that could happen when filestore block caches were released during message removal (#8548)
  • The last dedupe message ID is now restored correctly if the last message was outside of the window after restart (#8564)
  • An unreachable send snapshot condition has been removed from the stream monitor (#8565)
  • Pull request expiry is now counted as activity when inactive_threshold is set (#8575)
  • Purges and roll-ups on multi-filter subject consumers will no longer advance past unrelated subjects (#8572)
  • Filestore compression header checking is now extended to check for compatible compression values and for the presence of correct or incorrect first record checksums, avoiding collisions at the beginning of a message block (#8581)
  • JetStream usage from peer-removed nodes is now removed from the remaining cluster node accounting correctly (#8570)

Complete Changes

v2.14.6...v2.14.7-RC.1

Release v2.15.0-RC.1

Release v2.15.0-RC.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Sep 16:35
v2.15.0-RC.1
362f2f3

Changelog

This release also contains all changes up to and including v2.14.6.

Go Version

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_MOVE endpoint
  • Evacuate endpoints (#8443)
    • The new $JS.API.SERVER.EVACUATE endpoint 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
  • Metalayer rescue for disaster recovery (#8408)
    • The new $JS.API.META.RESCUE endpoint 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
  • 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_consumers is 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_consumers in the stream config or account limits to an appropriately high number
    • The server-wide default of 1000 can be overridden by setting default_max_consumers in 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
  • Sync changes for replicated streams (#8447)
    • When the sync_interval is set to always, 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
  • The js_raft_delete_range feature is now enabled by default (#8520)

Leafnodes

  • The no_advertise option 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-enforced isolate, now works correctly across cluster nodes (#8504)

Complete Changes

v2.14.6...v2.15.0-RC.1