Skip to content

Releases: nats-io/nats.go

Release v1.21.0

05 Dec 16:15
6c6add8
Compare
Choose a tag to compare

Changelog

Added

  • ConnectHandler connect option to detect that initial connection was established. This is especially useful when combined with RetryOnFailedConnect (#1133 )
  • IgnoreAuthErrorAbort connect option to prevent aborting reconnect attempts after receiving the same authentication error twice (#1141)
  • SkipTLSHandshake option to CustomDialer. SkipTLSHandshake method can be implemented on a custom dialer to prevent TLS handshake if not needed (#1147)
  • KV:
    • Return ErrKeyExists error when attempting to Create() a KV pair for an existing key (#1135, #1136)
  • JetStream:
    • Add ErrLeadershipChanged error, returned when consumer leadership has changed during a pull request on a consumer. Thanks to @sata-form3 for the contribution (#1151)

Improved

  • Remove deprecated usages of io/ioutil. Thanks to @cesarvspr for the contribution (#1150)
  • Remove experimental notice from KV implementation (#1154)

Complete Changes

v1.20.0...v1.21.0

Release v1.20.0

11 Nov 15:19
5c57d4b
Compare
Choose a tag to compare

Changelog

Changed

  • JetStream:
    • [BREAKING CHANGE] Extract nats: Consumer Deleted server error to ErrConsumerDeleted variable. This error is returned when consumer is deleted while waiting on pull request and was introduced in nats-server v2.9.6 (#1125)

Improved

  • JetStream:
    • Fix broken comments on ErrConsumerNameAlreadyInUse and StreamNameBySubject(). Thanks to @subtle-byte for the contribution (#1128)
  • Core NATS:
    • Improve comment on RetryOnFailedConnect connect option (#1127)

Complete Changes

v1.19.1...v1.20.0

Release v1.19.1

05 Nov 09:31
980f955
Compare
Choose a tag to compare

Changelog

Added

  • JetStream:
    • Expose StreamNameBySubject method on JetStreamContext interface for looking up stream by subject (#1114)
    • Return stream alternates when fetching stream info (#1118)

Changed

  • KV:
    • Use BindStream for watcher so it works with mirrors (#1116)

Fixed

  • KV:
    • Delete key not working correctly across mirrors (#1115)

Complete Changes

v1.19.0...v1.19.1

Release v1.19.0

27 Oct 19:35
Compare
Choose a tag to compare

Changelog

Added

  • KV:
    • Support for KV mirrors and sources (#1112)

Improved

  • JetStream:
    • Comment on InactiveThreshold to align with server version 2.9.0. Thanks to @neilalexander for the contribution (#1106)

Experimental

  • Added Service framework for microservice communication using core NATS. This is an experimental preview and may be changed in future releases (#1111)

Complete Changes

v1.18.0...v1.19.0

Release v1.18.0

12 Oct 18:38
885ad13
Compare
Choose a tag to compare

Changelog

Added

  • JetStream:
    • Support for DiscardNewPerSubject on stream configuration (#1102)
  • KV:
    • KeyValueStores() and KeyValueStoreNames() methods for listing key value buckets (#1088)
    • Bytes() method on KeyValueStatus returning size of the bucket (#1092)

Improved

  • JetStream:
    • Comment on Subscribe() method in JetStream interface now has a better description of the behavior after unsubscribing from a durable consumer. Thanks to @sylr for the contribution (#1100)

Changed

  • JetStream:
    • Ordered consumer is now being recreated on missing heartbeat (#1097)
    • AckNone policy can now be set for pull consumers (#1090)
  • ObjectStore:
    • [BREAKING] ObjectStores() now returns channel of ObjectStoreStatus instead of ObjectStore interface (#1099)
    • [BREAKING] Options on various ObjectStore methods now have individual types (GetObjectOpt, GetObjectInfoOpt and ListObjectsOpt). Only options applicable for a particular method can be used (#1091)
    • [BREAKING] When listing/fetching object info, deleted objects are now hidden by default. New options are added to enable fetching deleted objects (GetObjectInfoShowDeleted(), GetObjectShowDeleted() and ListObjectsShowDeleted() (#1091)

Fixed

  • JetStream:
    • Invalid JSON tag on Tiers field on AccountInfo struct (#1095)

Complete Changes

v1.17.0...v1.18.0

Release v1.17.0

16 Sep 16:24
715a591
Compare
Choose a tag to compare

Changelog

IMPORTANT

This release uses a new consumer create API when interacting with nats-server version 2.9.0 or higher. This changes the subjects used by the client to create consumers, which might in some cases require changes in access and import/export configuration. To opt out of this feature, use UseLegacyDurableConsumers() option when creating JetStreamContext.

Added

  • JetStream:

    • Support for enhanced stream purge. PurgeStream() now accepts StreamPurgeRequest as an option, allowing partial purge by subject sequence number or keeping selected number of messages (#988)
    • Option to fetch DeletedDetails when fetching StreamInfo. StreamInfo() now accepts StreamInfoRequest allowing to pass DeletedDetails flag (#990)
    • Option to report subjects on StreamInfo() request. StreamInfo() now accepts StreamInfoRequest allowing to pass SubjectsFilter value (#1010)
    • Support AllowDirect in stream configuration, enabling faster access to individual messages on a stream (#991)
    • Support for DirectGet API in GetMsg() through DirectGet() and DirectGetNext() options (#1020, #1030)
    • HeadersOnly option to RePublish field on stream configuration and change struct name to RePublish (#991)
    • SecureDeleteMsg() method to securely delete and overwrite a message on a stream (#1025)
    • MaxRequestMaxBytes() PullConsumer() option allowing setting the maximum number of bytes a single Fetch()can receive (#1043)
    • Filter streams and stream names by subject in StreamsInfo() and StreamNames() using StreamListFilter() option (#1062)
    • Accept AckAll for pull consumers. Thanks to @neilalexander for the contribution (#1063)
    • Support for setting consumer replicas through Subscribe() options. Thanks to @goku321 for the contribution (#1019)
    • Support for setting memory storage on consumer with ConsumerMemoryStorage() option in Subscribe(). Thanks to @goku321 for the contribution (#1078)
  • KV:

    • RePublish option on key value configuration (#1031)
  • ObjectStore:

    • ObjectStores() and ObjectStoreNames() methods for listing object store buckets (#1074)
  • TLSConnectionState() to expose TLS connection state (#996)

  • UserJWTAndSeed helper function accepting JWT and seed as parameters (#1046)

  • natsProtoErr type for proto error normalization and comparison using errors.Is() (#1082)

Improved

  • JetStream

    • Add JetStreamError type for all JetStream related errors, containing error codes (for API errors). JetStreamError supports comparing and unwrapping errors using native errors package (#1044, #1047)
    • Force Subscribe() to use memory storage and no replicas when using OrderedConsumer() (#989)
    • Consistent error value of context timeout when using Fetch() on pull subscription. Thanks to @wdhongtw for the contribution (#1011)
    • Add additional note to PullSubscribe() on durable semantics (#994)
  • KV:

    • Utilize DirectGet() in KV for improved performence (#1020)
  • Add support for reporting flusher errors. THanks to @GeorgeEngland for the contribution (#1015)

  • Mention field defaults in Options struct documentation. Thanks to @costela for the contribution (#1013)

Changed

  • JetStream:
    • DeleteMsg() now uses NoErase option by default, not overwriting the message on stream (only marking it as deleted) (#1025)
    • StreamInfo() will now return all subjects when requested (#1072)

Updated

  • JetStream:

    • [BREAKING] Use new consumer create API when interacting with nats-server version 2.9.0 or higher. This changes the subjects used by the client to create consumers, which might in some cases require changes in access and import/export configuration. To opt out of this feature, use UseLegacyDurableConsumers() option when creating JetStreamContext (#1080)
    • Add missing fields to AccountInfo schema (#1026)
    • Align StreamSourceInfo schema with server (#1039)
  • Use nats-server 2.9.0 in tests (#1073)

  • Add new test TLS certs and run tests for go 1.18 in CI (#1023, #1055)

Fixed

  • JetStream

    • Subscribe() automatically sending ACK when AckPolicyNone is set (#987)
    • Return error when attempting to ACK a message on a AckNone consumer (#1032)
    • Use native time.Time.Equal method for equality check when comparing consumer configs (#993)
    • Ephemeral PullConsumer's Fetch() failing with "no responders" (#1022)
    • ConsumerInfo nil pointer dereference when jsi is not initialized. Thanks to @Sergey-Belyakov for the contribution (#1024)
    • Paging in stream and consumer name listing (#1060)
  • ObjectStore

    • Update object Put() to avoid loosing last chunk when Reader returns both value and EOF. Thanks to @tinou98 for the contribution (#995)
    • Invalid digest decoding on object Get(), not propagating errors from Get() to the user (#1052)
    • Allow updating meta if new name exists but is deleted (#1053)
    • Disallow adding links in Put() object meta (#1057)
  • Typo in CustomInboxPrefix() error message. Thanks to @subtle-byte for the contribution (#1028)

  • Ignore trailing comma at the end of URL lists (#1058)

Complete Changes

v1.16.0...v1.17.0

Release v1.16.0

26 May 20:41
b795e86
Compare
Choose a tag to compare

Changelog

Added

  • JetStream:
    • Experimental: StreamConfig.RePublish configuration, which is a SubjectMapping (source/destination) which allows the republish of a message after being sequenced and stored (#980)
    • Experimental: Two new ConsumerConfig fields: Replicas and MemoryStorage which are generally inherited by parent stream, but can be configured directly (#980)
  • Websocket:
    • ProxyPath() option to add a path to websocket connection URLs. Thanks to @ido-gold-apolicy for the contribution (#974)

Complete Changes

v1.15.0...v1.16.0

Release v1.15.0

04 May 22:09
f52eb7b
Compare
Choose a tag to compare

Changelog

Experimental

The ObjectStore is still experimental and subject to change.

Added

  • ObjectStore:
    • MaxBytes in the ObjectStoreConfig structure (#955)

Improved

  • JetStream:
    • Ability pass 0 to nats.ExpectLastSequence(0) and nats.ExpectLastSequencePerSubject(0) to the js.Publish() call. Previously, the value 0 would be ignored and the header would not be set. Note that currently, the server only accepts 0 as a valid value for nats.ExpectLastSequencePerSubject(). Thanks to @bruth for the contribution (#958)

Fixed

  • JetStream:
    • A PullConsumer's Fetch() method with a batch greater than 1 and with other pull consumers running, may timeout although messages would have been available (#967)

Complete Changes

v1.14.0...v1.15.0

Release v1.14.0

08 Apr 20:27
1714729
Compare
Choose a tag to compare

Changelog

JetStream and KeyValue users

Please see the "Changed" section for important (possibly breaking) changes compared to the previous version.

Experimental

The ObjectStore is still experimental and subject to change.

Added

  • JetStream:
    • Support for tracing API calls (#849, #911)
    • Error ErrMsgAlreadyAckd for a more detailed error when trying to acknowledge a message that already was. Thanks to @Berreek for the contribution (#862)
    • Made js.Subscribe() calls context aware (#872)
    • UpdateConsumer() and new consumer configuration options: MaxRequestBatch, MaxRequestExpires and InactiveThreshold (#893)
    • NakWithDelay() new acknowledgment call, and BackOff list of duration in the ConsumerConfig object (#894)
    • BackOff() subscription option. Thanks to @mfaizanse for the contribution (#933)
    • StallWait() publish option. This is the wait time (default is 200ms) that the library will wait when reaching the maximum inflight number of asynchronous publish calls (#941)
  • KeyValue:
    • Status functionality (#845)
    • MetaOnly() watcher option (#854)
    • GetRevision() to get the key at a specific revision, or ErrKeyNotFound if the key does not exist or not at the expected revision. Thanks to @boxboatmatt for the contribution (#903)
    • Placement in the KeyValueConfig structure (#929)
    • Expose nats.Context() option for the nats.KeyWatcher interface. Thanks to @boxboatmatt for the contribution (#904)
  • ObjectStore:
    • Status functionality (#845)
    • Placement in the ObjectStoreConfig structure (#929)
  • ConnectedUrlRedacted() a redacted version of ConnectedUrl() (#923)

Changed

  • JetStream:
    • The library no longer sets a default MaxAckPending when creating a JetStream consumer on Subscribe(). The selection of the value is left for the server to pick (#920)
    • The library will now try to resend a message when getting a ErrNoResponders error on a Publish() or StreamInfo() call. This is to overcome "blips" that may happen during leader changes. The action will be retried up to 2 times with a 250ms wait in between. These can be changed with the new publish options RetryWait() and RetryAttempts() (#930)
    • PublishMsgAsync() will now be limited to 4,000 maximum asynchronous publish calls inflight, if no maximum has been specified with PublishAsyncMaxPending() option.
  • KeyValue:
    • Delete() and Purge() now accept optional DeleteOpt options. The option available is LastRevision() which allows the purge or delete to be conditional to the last revision be equal to the last revision value, otherwise the operation will fail. Thanks to @steveh for the contribution (#856)
    • PurgeDeletes() will now keep markers that are less than 30 minutes by default. Also, PurgeDeletes() now accepts optional PurgeOpt values, not WatchOpt. The new DeleteMarkersOlderThan() option can be provided to change the default 30 minutes. A negative value will remove markers, regardless of their age (#906)
    • When connecting to a v2.7.2+ server, the stream for the KeyValue should be created with DiscardNew instead of DiscardOld. The library will now automatically update an existing stream for a KeyValue from DiscardOld to DiscardNew (#917)

Improved

  • Websocket:
    • Use 80 or 443 as default ports, depending on the scheme ws:// or wss://. Thanks to @cbrake for the suggestion (#879)
  • The connect failure error message when given an invalid user credentials file (#916)
  • The library will now auto-reconnect when the connection is closed on maximum connections reached from server, which could happen after a configuration reload. The library would previously have caused the connection to be permanently closed (#935)

Updated

  • Examples:
    • The Nats-echo service example to simulate a status request (#950)
    • Comment for the demo servers. Removed the TLS specific version since one can connect with TLS or not to the same port (#952)

Fixed

  • Documentation:
    • Typo in Bind go documentation. Thanks to @caspervonb for the contribution (#860)
    • Typo in SetClosedHandler. Thanks to @tormoder for the contribution (#877)
    • Typo in example_test.go. Thanks to @bvwells for the contribution (#882)
    • Comment for Subscribe method. Thanks to @ipromax for the contribution (#886)
    • Many API calls where not checking that stream and consumer names were valid, that is, did not contain a . in their name. This resulted in situations where the API would timeout because the server did not have interest on the malformed subject. Thanks to @sata-form3 for the report (#947)
  • JetStream:
    • Ordered consumers handling of auto unsubscribe (#847)
    • Activity check to handle cases when subscription was closed. Thanks to @boxboatmatt for the contribution (#873)
    • Return ErrStreamNotFound when calling AddConsumer against a missing stream (#881)
    • Prefix the error returned by StreamInfo() with nats: to match ConsumerInfo() (#928)
  • KeyValue:
    • Ensure Get() returns a nil and ErrKeyNotFound as per specification (#844)
    • Various issues, such as cancel of the context would not all the range on w.Updates() to exit, flow control, etc.. (#900, #901)
    • Use of the APIPrefix to work correctly across accounts (#910)
  • Websocket:
    • When using secure connection wss:// and a host name that resolves to multiple IPs, or when trying to reconnect to discovered servers, the (re)connection would fail with websocket invalid connection (#915)
    • Deadlock on authentication failure that manifested by a Connect() hanging forever. Thanks to @wenerme for the report (#926)

Complete Changes

v1.13.0...v1.14.0

Release v1.13.0

07 Oct 23:36
41cb5bc
Compare
Choose a tag to compare

Changelog

JetStream users

Please review release notes from v1.12.0 regarding important changes if upgrading from an earlier release.

Experimental

This release introduces KeyValue and ObjectStore as experimental features. Note that their APIs are subject to change based on community feedback. Also, some features will not work unless using NATS Server from the main branch, or the version following the latest public release v2.6.1.

Added

  • JetStream:
    • HeadersOnly() subscription option to only deliver headers but not the message payloads (#832)
    • Sealed, DenyDelete, DenyPurge and AllowRollup stream configuration options (#832)
    • GetLastMsg() retrieves the last raw stream message stored in JetStream by subject (#832)
  • KeyValue and ObjectStore (#832)
  • ConnectedServerVersion() returns the server's version string, or empty if not currently connected to a server (#832)

Fixed

  • JetStream:
    • Flow control may stall in some conditions (#837)
    • Context usage for Fetch() and Ack(). Thanks to @andreib1 and @T-J-L for the reports (#838)
    • Queue name cannot contain "." character when used as the durable name. Thanks to @saschahagedorn-f3 for the report (#841)
    • PublishMsgAsync would fail if a message reply was already set (#832)

Complete Changes

v1.12.2...v1.13.0