Changelog
This release also contains all changes up to and including v2.12.7.
Go Version
- 1.26.2
Added
General
- Feature flags in the server configuration (#7866)
JetStream
- Fast-ingest batch publishing (#7778, #7892, #7894, #7945)
- Allows high-speed publishing of message batches into the server when using a supported client
- ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-50.md#fast-ingest-batch-publishing
- Repeating & cron-based message schedules (#7504, #7687, #7688)
- The
Nats-Scheduleheader can now be configured on a repeating basis, i.e.@every 5m,@hourlyor using crontab-like syntax - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-51.md
- The
- Scheduled subject sampling (#7506)
- The
Nats-Schedule-Sourceheader allows sampling the contents of the last message in the stream for a given subject, allowing sampling of values at a different rate to the original publisher - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-51.md#subject-sampling
- The
- Scheduled subject rollups (#7559)
- The
Nats-Schedule-Rollupheader allows initiating a rollup of theNats-Schedule-Targetsubject on a scheduled basis - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-51.md
- The
- Consumer reset API (#7489)
- It is now possible to reset a consumer back to an earlier sequence number using the
$JS.API.CONSUMER.RESET.stream.consumerAPI without deleting and recreating it - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-60.md#consumer-delivery-state-reset-api
- It is now possible to reset a consumer back to an earlier sequence number using the
- Domain-aware ack and flow control subjects (#7860)
- This is disabled by default and can be enabled with the
js_ack_fc_v2feature flag, this will be enabled by default in v2.15 - In an environment where ACLs are used to control ack or flow control subjects, updates will be required to match the new
$JS.ACK.domain.acchash.stream.consumer.>and$JS.FC.domain.acchash.stream.consumer.>subject formats
- This is disabled by default and can be enabled with the
- Asynchronous stream state snapshots for replicated streams (#7876)
- Allows stream state snapshots to be taken and written without pausing stream processing, improving tail latencies
- This is particularly impactful in cases where the stream has a large number of interior deletes
- Ability to disable message deduplication when sourcing (#7651)
Leafnodes
- Leafnode remote configurations can now be added and removed at runtime by reloading the configuration (#7937)
Changed
General
- The
traceparentheader is no longer modified by the message tracing (#7755)- The sentinel
Nats-Trace-Dest: trace disabledheader value disables all server tracing-related functionality
- The sentinel
JetStream
- Consumers now generate a
404 No Messagesresponse when usingno_waitbut without setting an expiry when there are no pending messages in the stream (#7466) - Invalid or divergent consumer state is reset to match the stream state on startup, i.e. after unclean shutdowns (#7692)
- Account info, stream info, stream list, consumer info and consumer list API requests are now queued separately, deprioritising them relative to create-update-delete API operations (#7898)
Improved
JetStream
- Sourcing and mirroring from interest and workqueue streams is now supported (#7613)
- When sourcing or mirroring from an interest or workqueue stream, the server automatically upgrades to a durable consumer with
AckFlowControlpolicy and uses consumer reset where necessary - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-60.md
- When sourcing or mirroring from an interest or workqueue stream, the server automatically upgrades to a durable consumer with
- End-of-batch commit support for atomic batch publishing (#7403)
- Batches can now be committed after already having sent the last message with
Nats-Batch-Commit: eob, which indicates the batch is to be committed, but this last message is purely used to commit and doesn't get persisted - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-50.md
- Batches can now be committed after already having sent the last message with
- Rollups are now allowed if the stream has reached the
discard_new_per_subjectlimit (#7974) - Raft nodes will step down if overrun (#7853)
Fixed
JetStream
- Raft nodes will no longer start if the snapshot is missing or corrupt, or if the snapshot doesn't align with the remaining log on disk, avoiding potential data loss (#7566, #7580, #7620)
- Filestore operations now handle read and write errors from the filesystem more thoroughly (#7788)
- Filestore recovers from partial purge after hard kill (#7676)
- Consistent Raft group rename when moving to or off R1 (#7802)