Skip to content

v0.2.0

Choose a tag to compare

@ChristianAlexander ChristianAlexander released this 30 Jan 14:33
· 13 commits to main since this release

Upgrading from 0.1.x

If you use the polling scheduler (DurableObject.Scheduler.Polling), the following changes are required. Users of the Oban scheduler are unaffected.

Required migration: Generate and run an upgrade migration before deploying:

mix durable_object.gen.migration
mix ecto.migrate

The task automatically detects your current migration version and generates the appropriate upgrade migration.

Idempotent handlers: The polling scheduler now uses at-least-once delivery. If a node crashes mid-handler, the alarm will be retried after claim_ttl expires (default: 60 seconds). Ensure your handle_alarm/3 callbacks are idempotent.

Added

  • mix durable_object.gen.migration task to generate upgrade migrations automatically
  • base option for DurableObject.Migration.up/1 and down/1 to support incremental upgrades
  • Crash recovery for polling scheduler alarms: if the server crashes or restarts while executing an alarm handler, the alarm is automatically retried
  • New claim_ttl option for polling scheduler (default: 60 seconds) - controls how long before a claimed alarm becomes eligible for retry. Lower values reduce recovery latency but increase risk of duplicate delivery if handlers are slow.
  • Migration version 3 adds claimed_at column to durable_object_alarms table

Changed

  • Polling scheduler now uses at-least-once semantics (handlers should be idempotent)
  • Alarms are claimed before firing and only deleted on success
  • Failed or interrupted alarm handlers will retry after the claim TTL expires