github nats-io/nats.go v1.17.0
Release v1.17.0

latest releases: v1.37.0, v1.36.0, v1.35.0...
2 years ago

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

Don't miss a new nats.go release

NewReleases is sending notifications on new releases.