Skip to content

Releases: nats-io/nats-server

Release v2.9.17

18 May 18:26
4f2c9a5
Compare
Choose a tag to compare

Changelog

Go Version

  • 1.19.9

Dependency Updates

  • github.com/klauspost/compress v1.16.5 (#4088)

Improved

Core

  • Additional optimizations to outbound queues, reducing memory footprint (#4084, #4093, #4139)
  • Use faster flate compression library for WebSocket transport compression (#4087)

Leafnodes

  • Optimize subscription interest propagation for large leafnode fleet (#4117, #4135)

Monitoring

  • Support sorting by RTT for /connz (#4157)

Resolver

  • Improve signaling for missing account lookups (#4151)

JetStream

  • Optimized determining if a stream snapshot is required (#4074)
  • Run periodic check for consumer “ack floor” drift on leader (#4086)
  • Optimize leadership transfer during a stream migration (#4104)
  • Improve how clustered consumer state is hydrated on startup (#4107)
  • Add operation type to panic messages for improved debugging (#4108)
  • Improve health check to repair stalled assets periodically (#4116, #4172)
  • Remove unnecessary filestore lock to improve I/O performance (#4123)
  • Various Raft leadership improvements (#4126, #4142, #4143, #4145)
  • Improve accuracy of account usage (#4131)
  • Clean up old Raft groups when streams are reset (#4177)

Fixed

General

  • Fix various names in comments (#4099) Thanks to @cuishuang for the contribution!
  • Fix various typos in comments (#4169) Thanks to @savion1024 for the contribution!
  • Update tests to reflect the server.Start() call no longer blocks (#4111) Thanks to @lheiskan for reporting the issue!
  • Fix race condition in config reload with gateway sublist check (#4127)
  • Track all remote servers in a NATS system with different domains (#4159)

Core

  • Fix premature closing in WebSocket transport due to outbound queue changes (#4084)
  • Fix subscription interest for config-based accounts during config reload (#4130)
  • Use monotonic time for measuring durations internally (#4132, #4154, #4163)

Monitoring

  • Service import reporting for /accountz when mapping to local subjects (#4158)

JetStream

  • Fix formatting of Raft debug log (#4090)
  • Prevent failure of /healthz in single server mode on failed snapshot restore (#4100)
  • Ensure a stream Raft node has fully stopped and resources freed (#4118)
  • Fix case where R1 streams are orphaned and can’t scale up (#4146)
  • Protect against out of bounds access on usage updates (#4164)
  • Fix state rebuild where the first block is truncated and missing index info (#4166)
  • Avoid stale KV reads on server restarted for replicated stores (#4171) Thanks to @yixinin for reporting the issue!
  • Prevent deadlock with usage report for accounts (#4176)

Complete Changes

v2.9.16...v2.9.17

Release v2.9.16

17 Apr 14:59
v2.9.16
f84ca24
Compare
Choose a tag to compare

Changelog

Go Version

  • 1.19.8

Dependency Updates

  • github.com/klauspost/compress v1.16.4
  • github.com/nats-io/jwt/v2 v2.4.1
  • github.com/nats-io/nkeys v0.4.4
  • golang.org/x/crypto v0.8.0
  • golang.org/x/sys v0.7.0

Added

Build

  • Nightly build of the “main” branch as a Docker image: synadia/nats-server:nightly-main (#3961, #3962, #3963, #3972, #4019, #4063)
  • Version control SHA in the Goreleaser build of the server (#3993). Thanks for the report @jzhoucliqr!
    Monitoring
  • Add server name and route remote server name to /routez (#4054)

Resolver

  • Add “hard_delete” option for stored JWTs (#3783). Thanks for the contribution @JulienVdG!

Improved

JetStream

  • Storage and Raft layer improvements to decrease p99 latency variance and memory pressure in high load environments (#3956, #3952, #3965, #3981, #3999, #4018, #4020, #4021, #4022, #4026, #4027, #4028, #4029, #4030, #4038, #4045, #4050, #4053)
  • Don’t show Raft warning for node that is closed (#3968)
  • Use pooled buffer for flushing encrypted message blocks (#3975)
  • Remove snapshotting of cores and maxprocs (#3979)
  • Improvements to interest-based streams to optimize when messages are deleted (#4006, #4007, #4012)
  • Better handling of concurrent stream and consumer creation of the same name (#4013)
  • Finer-grain locking during asset checking to reduce contention in the /healthz endpoint (#4031)
  • Encrypted file stores will now limit block sizes to improve performance (#4046)
  • Improve performance on storing messages with varying subjects and limits are imposed (#4048, #4057). Thanks for the report @kung-foo!

Fixed

Subjects

  • Ensure subjects containing percent (%) are escaped (#4040)

Accounts

  • Fix data race when setting up service import subscriptions (#4068)

Leaf

  • Fix leaf client connection failing on OCSP setups (#3964)
  • Fix case when allow/deny permissions on leaf connection could block legitimate interest (#4032)

Cluster

JetStream

  • Pull consumer not sending timeout error to clients for expired requests (#3942)
  • Prevent meta leader deadlock during deletion of orphaned streams during server startup (#3945)
  • Clear ack’ed messages when scaling workqueue or interest-based streams (#3960) Thanks for the report @Kaarel!
  • Remove messages from interest-based stream on consumer snapshot (#3970)
  • Fix potential panic in message block buffer pool (#3978)
  • Fixed an issue with consumer states growing and causing instability (#3980)
  • Improve handling of out-of-storage condition (#3985)
  • Address memory leak of unreachable Raft groups when JetStream becomes disabled (#3986)
  • Prevent Raft leader from being placed on server in lame-duck mode (#4002)
  • Remove potential race condition on sysRequest (#4017)
  • Fix FirstSeq not being updated with filestore when purging subject (#4041). Thanks for the contribution @MauriceVanVeen!
  • Fix Raft log debug reloading (#4047)
  • Ensure consumer recovers fully on restart before being eligible for leader (#4049)
  • Fix incorrect check between stream source/mirror with external streams (#4052)
  • Fix various conditions during Raft group recovery (#4056, #4058)

Complete Changes

v2.9.15...v2.9.16

Release v2.9.15

02 Mar 17:19
b91fa85
Compare
Choose a tag to compare

Changelog

Go Version

  • 1.19.6: Both the release executables and Docker images are built with this Go release

Added

  • Monitoring
    • Add raft query parameter to /jsz to include group info (#3915)
    • Update /leafz to include leaf node remove server name and “spoke” flag (#3923, #3925)

Changed

  • Lower default value of jetstream.max_outstanding_catchup to prevent slow consumers between routes (#3922)
    • Note: The new value is now 64MB from 128MB. This is better optimized for 1 Gbit links, however if your links are 10 Gbit or higher, this value can be set back to 128MB if slow consumers were not previously observed.

Improved

  • Refactor intra-process queue to reduce allocations (#3894)
  • JetStream
    • Better system stability and recovery from corrupt metadata due to hard forced restarts (#3934)
    • Optimize on-disk, per-subject info update (#3867)
    • Limit concurrent blocking IO to improve stability under heavy IO loads (#3867)
    • Improve message expiry calculation for large numbers of messages (#3867)
    • Optimize when and how consumer num pending is calculated, significantly speeding up consumer info requests (#3877)
    • Improve parallel consumer creation to prevent dropped messages (#3880)
    • Properly warn on consumer state update state failures (#3892)
    • Performance of consumer creation for certain configurations (#3901)
    • Send current snapshot to followers when becoming meta-leader (#3904)
    • Ensure preferred peer during stepdown is healthy (#3905)
    • Optimized various store calls on stream state (#3910)
    • Various performance and stability under heavy IO loads (#3922) (Thank you @matkam and @davidzhao for the report and the test harness!)

Fixed

  • Fix stack overflow panic in reverse entry check when inbox ends with wildcard (#3862)
  • Check if client connection name was already set when storing, preventing recursive memory growth (#3886)
  • Fix check for count of wildcard tokens in “partition” subject transform (#3887) (Thank you @MauriceVanVeen for the contribution!)
  • Fix panic if service export is nil (#3917) (Thank you @MauriceVanVeen for the report!)
  • JetStream
    • Ensure per-subject info is updated when doing stream compact (#3860)
    • Ensure account usage is updated in the filestore when extended version purge occurs (#3876)
    • Prevent consumer deletes on restart, with non-fatal errors (#3881)
    • Do not warn if consumer replicas is zero since it will be inherited from the stream (#3882)
    • Named push consumers with inactive thresholds deleted when still active (#3884)
    • Prevent spurious “Error storing entry to WAL” log messages (#3893, #3891)
    • Clean up consumer redelivery state on stream purge (#3892)
    • Clean up consumer ack pending if below stream ack floor (#3892)
    • Update ack floors on messages being expired (#3892)
    • Fix lost ack pending consumer state on partial stream purge (#3892)
    • Snapshot and compact the consumer RAFT WAL, even when state changes do not occur, to prevent excessive disk usage (#3898)
    • Fix KV accounting errors under heavy concurrent usage (#3900)
    • Ensure new replicas respect MaxAge when a stream is scaled up (#3861)
    • Snapshots would not compact after being applied (#3907)
    • Fix filtered pending state calculation (#3910)
    • Recover from a failed truncate on raft WAL (#3911)
    • Fix JWT claims update if headers are passed (#3918)
  • MQTT
    • Prevent use of wildcard characters with topics beginning with $, per the MQTT spec violation 4.7.2-1 (#3926) (Thank you @dominikh for the report!)

Dependency Updates

  • klauspost/compress - v1.16.0
  • nats-io/nats.go - v1.24.0
  • golang.org/x/crypto - v0.6.0
  • golang.org/x/sys - v0.5.0

Complete Changes

v2.9.14...v2.9.15

Release v2.9.14

06 Feb 19:50
74ae59a
Compare
Choose a tag to compare

Changelog

Go Version

  • 1.19.5: Both the release executables and Docker images are built with this Go release

Fixed

  • JetStream
    • Fix circumstance when an empty snapshot could be written (#3844)
    • Fix possible panic and deadlock during a consumer filter subject update (#3845)
    • Fix consumer snapshot logic (#3846)

Complete Changes

v2.9.12...v2.9.14

Release v2.9.12

02 Feb 19:04
194d9ce
Compare
Choose a tag to compare

Changelog

NOTE: regressions were found in this release. Please skip this and go directly to the v2.9.14 release.

Go Version

  • 1.19.5: Both the release executables and Docker images are built with this Go release

Added

  • OS/Arch
    • Add support for dragonfly BSD (#3804)

Improved

  • JetStream
    • Use highwayhash to optimize difference tracking for stream, consumer, and cluster snapshots (#3780)
    • Add small tolerance in lag for stream and consumer health checks (#3794)
    • Various optimizations related to snapshots and memory usage (#3828, #3831, #3837) Thanks to @MauriceVanVeen for the collaboration on this issue.

Fixed

  • JetStream
    • Update numCores and maxProcs if altered by container limits (#3796)
    • Fix filtered state for all subjects when the first sequences are deleted (#3801)
    • Updating a stream to direct gets would fail direct gets (#3806)
    • Force consumer replicas to match for interest-based policy streams (#3817)
    • Assign signal subscription to consumer when created (#3808)
    • Properly process updates on a stream on restart (#3818)
    • Select consumer peer(s) from active/online peers only on creation (#3821)
    • Sourced streams that do not overlap subjects were incorrectly reported as a cycle (#3825)
    • Fix for isGroupLeaderless when JS not available due to shutdown (#3830)
    • Deadlock on data loss when holding mb lock (#3832)
    • Fix consumer not getting messages after filter update (#3829)
    • Fix current consumers not getting messages after purge (#3838) Thanks to @pcsegal for the report!

Updated Dependencies

  • github.com/klauspost/compress - v1.15.15
  • github.com/nats-io/nats.go - v1.23.0
  • golang.org/x/time - v0.3.0

Complete Changes

v2.9.11...v2.9.12

Release v2.9.11

06 Jan 17:41
23ffc16
Compare
Choose a tag to compare

Changelog

Go Version

  • 1.19.4: Both the release executables and Docker images are built with this Go release

Improved

  • Remove duplicate subscription point to reduce memory usage (#3768)

Updated

  • Update golang.org/x/crypto dependency to v0.5.0 (#3761). Thanks to @friedrichwilken for the contribution.

Fixed

  • JetStream
    • Allow recovery of stream meta file if not properly flushed prior to restart (#3752)
    • Ensure max bytes are honored when message block is not properly flushed (#3757). Thanks to @containerpope for the report.
    • Ensure new consumers assigned to an offline server are properly restored from the metaleader's snapshot (#3760)
    • Set and clear observer state for servers with disconnected leaf nodes (#3763)
  • Leaf node
    • Fix duplicate messages when leaf node binds an account with service imports (#3751). Thanks to @asambres-form3 and @maxarndt for the original reports.
  • Monitoring
    • Add back existing HealthzOptions.JSEnabled field to restore backwards compatibility (#3744)

Complete Changes

v2.9.10...v2.9.11

Release v2.9.10

20 Dec 15:54
4caf6aa
Compare
Choose a tag to compare

Changelog

Go Version

  • 1.19.4: Both the release executables and Docker images are built with this Go release

Improved

  • JetStream
    • Improve performance and latency with large number of sparse consumers (#3710)
    • Simplify locking for consumer info requests (#3714)

Fixed

  • JetStream

    • Ensure previously assigned nodes are removed from stream assignment (#3707, #3709)
    • Bad first sequence and expiration stopped working after server restart (#3711)
    • Fix no-quorum issue if leader is restarted with a memory-based clustered stream (#3713)
    • Fix dangling message block on compaction/cleanup which could prevent a stream from restoring (#3717) thanks to @k15r for the report
    • Prevent overlapping stream subjects on stream update in non-clustered JetStream (#3715)
  • Monitoring

    • /healthz?js-enabled=true behavior now properly asserts whether JetStream is enabled if it is expected to be and does not check for health of the assets. (#3704)

Complete Changes

v2.9.9...v2.9.10

Release v2.9.9

08 Dec 17:44
825949b
Compare
Choose a tag to compare

Changelog

Go Version

  • 1.19.4: Both the release executables and Docker images are built with this Go release

Improved

  • JetStream

    • Avoid full state snapshot for streams with many deleted items (#3680)
    • Refactor to make stream removal from server consistent (#3691)
  • Help/Usage

    • Display two additional --reload signal options, ldm and term (#3683)

Fixed

  • Authorization

    • Prevent returning no_auth_required when a client tries to connect in operator mode (#3667)
      • Any client (Java) that suppressed sending credentials before of this flag could be affected.
      • This only affects the 2.9.8 server version
  • JetStream

    • Tag policies not honored during stream replica reassignment after a peer is removed (#3678)
    • Address issues when concurrent "create" requests for the same stream are issued (#3679)
    • Server panic when consumer state was not decoded correctly (#3688)
    • Ensure consumers that are deleted on startup are removed from the system (#3689)
    • Fixed JetStream remained disabled for reactivated JWT accounts (#3690, thank you @JulienVdG)
  • Leafnodes

Complete Changes

v2.9.8...v2.9.9

Release v2.9.8

22 Nov 20:53
60e335a
Compare
Choose a tag to compare

Changelog

Go Version

  • 1.19.3: Both release executables and Docker images are built with this Go release.

Monitoring:

  • JetStream:
    • Server might crash if a pull consumer with an activity threshold is deleted immediately after a message ack (#3658). Thanks to @jdhenke for the report.
  • Server Info:
    • If no_auth_user is set, clear the auth required flag in the server info presented to the client (#3659)

Complete Changes

v2.9.7...v2.9.8

Release v2.9.7

17 Nov 16:58
1e76678
Compare
Choose a tag to compare

Changelog

Go Version

  • 1.19.3: Both release executables and Docker images are built with this Go release.

Improved:

  • JetStream:
    • Processing of acknowledgments (#3624)
    • Stream ingest performance with large numbers of consumers (#3633)
    • StreamDetail now includes stream creation for /healthz reporting. Thanks to @raypinto for the contribution (#3646)

Fixed

  • JetStream:
    • For "Interest" or "WorkQueue" policy streams, when a consumer was deleted, a stream view could cause high CPU or memory usage. Thanks to @Kaarel for the report (#3610)
    • Make sure to enforce HA asset limits during peer processing as well as assignment (#3614)
    • Account max streams/consumers not always honored (#3615)
    • Reduce some warning log messages "append entries" (#3619)
    • Logic bug that would prevent some stream messages from being deleted. Thanks to @Kaarel for the report (#3620, #3625)
    • Account removal leaks subscriptions. Thanks to @JulienVdG for the report (#3627)
    • Server fails to start on concurrent map read/write (#3629, #3634)
    • Possible panic on stream info when leader is not yet or elected or loses quorum. Thanks to @apuckey for the report (#3631)
    • Allow any type of ack to suppress auto-cleanup of consumer (#3635)
    • Make mirror consumers use filtered version of consumer create (#3638)
    • WorkQueue was not correctly rejecting overlapping consumers in some cases. Thanks to @Kilio22 for the report (#3640)
    • Make sure header keys do not have additional prefixes. Thanks to @osmanovv for the report (#3649)
  • Routing:
    • TLS connections to discovered server may fail (#3611, #3613)
  • Weighted subject mappings updates not applied (#3618)

Complete Changes

v2.9.6...v2.9.7