Skip to content

Release v1.2.0

Choose a tag to compare

@marcomq marcomq released this 25 Oct 12:06
· 38 commits to main since this release
d1cf65b

Description

A minor release that makes local sinks fast again and plugins load only when needed. The local object_store sink and file part files sync in groups about once a second instead of per object, with the same durability. Fixed are a sled queue that stalled, lost lines on file subscribe with delete: true, and QueueFull failures on Kafka delayed_ack. App routes from config files and the UI now default to concurrency: 4; see Changed below. Library users need no change when upgrading from 1.1.0.

  • New features
    • fsync and fsync_interval_ms on the local object_store sink. periodic (the default) syncs objects in groups every fsync_interval_ms (default 1000) and commits the source after that sync. batch syncs each object before its ack (the 1.1.0 behaviour), off never syncs. Remote stores ignore both.
    • Handler::observe for handlers that only watch messages. Returning Some(Passthrough::Forward) or Some(Passthrough::Ack) publishes or acks the batch unchanged, without calling handle or cloning messages.
  • Changed
    • Plugins load only when a route names them. The app no longer loads every installed plugin at start; only --schema, the UI schema, list, describe and unknown URI schemes scan.
    • App routes from config files and the UI default to concurrency: 4 and batch_size: 1024, like copy and MCP already did. A route that needs source order sets concurrency: 1. The library defaults are unchanged.
    • concurrency: 1 reads the next batch while the current one is sent. Sends stay one at a time in source order.
  • Fixed
    • Local object_store sink slowed down by per-object fsync (1.1.0). Objects are written under a hidden staging name and synced in groups; the source is committed only after that sync.
    • file part files (name_by: source_position) are synced in groups instead of two syncs per part; fsync: batch keeps the per-part sync.
    • A sled queue stalled after about a thousand writes while its consumer was busy, which also hung delete_after_read drains and in-process publishers.
    • file subscribe with delete: true lost and corrupted lines. Acked lines are removed before the commit returns, unread lines are no longer dropped past 100,000 buffered lines, and lines appended while others were unacked are read whole.
    • Kafka delayed_ack no longer fails fast inputs with QueueFull, which caused duplicates on retry; it waits for room in the producer queue.
    • Secrets in a switch's when cases are extracted like those in cases and default.
    • A plugin scan no longer reopens libraries it already loaded.

The full list is in the changelog.

Full Changelog: v1.1.0...v1.2.0