Skip to content

Release v2.10.17

Choose a tag to compare
@NATS-CI NATS-CI released this 27 Jun 22:53
· 854 commits to main since this release


Refer to the 2.10 Upgrade Guide for backwards compatibility notes with 2.9.x.

Go Version


  • v0.21.0 (#5508)
  • v0.24.0 (#5509)
  • v1.17.9 (#5538)
  • v1.36.0 (#5538)



  • Experimental /raftz monitoring endpoint for retrieving internal Raft group state for diagnostic purposes (#5530)



  • Reorder struct fields in stree for improved memory alignment (#5517)


  • Improve performance of calculating num-pending and interest state of a stream (#5476)
  • Improve leadership change signaling (#5504, #5505)
  • Improved memory-based stream behavior during server restarts (#5506)
  • Reset election timer when leaving observer mode enabling quicker leadership hand-off (#5516)
  • Ensure ack processing is consistent and correct between leader and followers for replicated consumers (#5524)
  • Use per-subject info to speed up load-last filestore operations with wildcard filters (#5546)
  • Populate missing per-subject info after skipping blocks when calculating filtered pending (#5545)
  • Reduced time taken to process consumer deletes when there is a large gap between the consumer ack floor and the stream last sequence (#5547)
  • No longer retrieve the WAL state unnecessarily when installing Raft snapshots (#5552)
  • Increased filestore block and per-subject info cache expiry times to help improve performance on sparse streams (#5568)
  • Reduce allocations in isMatch in filestore/memstore (#5573)
  • Improved handling of out-of-date first blocks in per-subject info entries (#5577)
  • Use stree for message block subject indexing instead of hashmaps (#5559)
  • Avoid loading last message blocks on LoadNextMsg miss (#5584)
  • Add node48 node size to stree, providing better memory utilisation for some subject spaces (#5585)
  • Logging message when exceeding JetStream account limits now prints the account (#5597)


  • Rate-limit statsz updates which reduces load for very large clusters (#5470, #5485) Thanks to @wjordan for the report and contribution!



  • Do not wait for JS responses when disconnecting the session (#5575)



  • Import/export cycle detection (#5494) Thanks to @semakasyrok for the contribution!
  • Allow callout users to be revoked (#5555, #5561)
  • Fixed a data race when updating payload limits from JWT claims (#5593)


  • Allow client kick to also kick leafnode connections (#5587)
  • Fix imports sometimes not being available for a client after server restarts (#5588, #5589)


  • Avoid panic on corrupted TAV file (#5464)
  • Performance regression in LoadNextMsg with very sparse or no messages (#5475)
  • Stepdown candidate when append-entry is ahead of last log term (#5481)
  • Fix possible redelivery after successful ack during rollout restarts (#5482)
  • Fix returning maximum consumers limit reached on some consumer updates (#5489)
  • Fix last sequence stream reset on server restart (#5497)
  • Fix data between creating a consumer and determining cluster state (#5501)
  • Prevent interleaving of setting/unsetting observer states (#5503)
  • Fix accounting for consumers with a different replication factor than the parent stream (#5521)
  • Fix potential segfault if mset.mirror was nil when calculating the last loaded message (#5522)
  • Follower stores no longer inherit the redelivered consumer delivered sequence which could break ack gap fill (#5533)
  • Direct Raft proposals will no longer bypass the internal proposal queue which could cause incorrect interleaving of state (#5543)
  • Audit streams that capture $JS.>, $JS.API.>, $JSC.> and $SYS.> subjects are now only allowed if NoAck is set, avoiding potential misconfiguration that could affect the JetStream API, with the exception of the more specific $JS.EVENT.> and $SYS.ACCOUNT.> as these were allowed before (#5548, #5556)
  • Streams from failed snapshot restores are now cleaned up correctly, fixing potential false positive warnings on /healthz after a failed restore (#5549)
  • Ensure that internal system clients used by Raft groups are always cleaned up correctly, fixing a potential memory leak (#5566) Thanks to @slice-srinidhis for the report!
  • Fixed a potential panic when updating stream sources on an existing stream (#5571)
  • Fixed panic when creating a stream with an incorrect mapping destination (#5570, #5571)
  • Fixed returning error when trying to update a stream that has sources with bad subject transforms (#5574)
  • Fixed a bug that would return “no message found” for last_per_subject (#5578)
  • Correctly leave Raft observer state after applies were paused, i.e. due to a catch-up in progress (#5586)
  • JetStream no longer leaks memory when creating and deleting Raft groups (#5600)
  • Fixed a potential panic in consumer ack queue handling (#5601)
  • Fixed data race in runAsLeader (#5604)


  • Prevent potential message duplication for queue-group subscriptions (#5519) Thanks to @pcsegal for the report!


  • Ensure consistency of the delivered stream sequence in /jsz filtered consumer reporting (#5528)



  • Clarify comment on re-use of config Options type for embedded mode (#5472) Thanks to @robinkb for the report and contribution!


  • Added additional memory-based Raft tests (#5515)

Complete Changes