Skip to content

v0.10.0

Latest

Choose a tag to compare

@github-actions github-actions released this 18 Sep 03:29
b403860

Modules

  • github.com/dangra/durable@v0.10.0
  • github.com/dangra/durable/contrib/durableotel@v0.10.0

Migration from v0.9.0

durable owes no compatibility to earlier releases; this release breaks the generated API, the handler contract, the proto options, and the cancel model.

  • Regenerate every pipeline proto (#99). The durable.v1.step and durable.v1.pipeline options are now extensions 1374 and 1375, durable's registered numbers; a descriptor compiled against 51841/51842 is invisible to the generator and the runtime.
  • Steps nest in their pipeline message (#95). A step is a message declared directly inside the pipeline message, in topology order; the steps list option is gone. Generated step types are Pipeline_Step.
  • One handler interface per pipeline (#93, #96). NewXxx(h XxxHandlers) takes one implementation with a method per step, Unwind<Step> per unwinding step, and ReduceOutput / ReduceFailure when the pipeline declares outputs. Per-step handler types and XxxFunc adapters are gone; handler methods receive XxxInvocation, a durable.TypedInvocation[*XxxInput].
  • Per-pipeline middleware (#97). NewXxx(h, xxxpb.WithMiddleware(mw...)) installs middleware on one pipeline, composed inside the engine chain once at Bind; hand-rolled definitions set pipelinedef.Config.Middleware.
  • Cancellation (#92, #98). A dormant or parked operation resolves as canceled at once with no handler run; a running attempt's context is canceled with a *durable.PreemptedError cause and anything but success resolves it as canceled; reduction is uncancellable; a park cascades to its targets only with durable.WithCancelCascade(). CancelRequested, FailFastOnCancel, and Yield are removed.
  • Shutdown interrupts, it does not fail (#89). An attempt cut by Stop that returns an ordinary error records no last error and no retry backoff; observers see AttemptInterrupted.
  • Run classes and unbounded workers (#87, #88). run_class on a pipeline plus engine.WithRunClass bound started nonterminal Runs with an eligibility-ordered line; workers are unbounded unless WithConcurrency is set.

What's Changed

  • Run classes: a run-scoped counting bound with an eligibility-ordered line by @dangra in #87
  • Unbounded workers by default by @dangra in #88
  • Run-class test: wait for every queued Run before reading Stats by @dangra in #91
  • Shutdown interrupts an attempt; it does not fail it by @dangra in #89
  • Cancellation: resolve the pending operation, cut the running one, cascade to children by @dangra in #92
  • Generated pipelines: one handler interface, one typed invocation by @dangra in #93
  • Steps nest in their pipeline message; the steps list is gone by @dangra in #95
  • Generated handlers: Reduce is ReduceOutput by @dangra in #96
  • A cancel request racing an attempt's registration still cuts it by @dangra in #98
  • Per-pipeline middleware, composed once at Bind by @dangra in #97
  • Extension numbers 1374 and 1375, durable's registered allocation by @dangra in #99
  • Release v0.10.0 by @dangra in #100

Full Changelog: v0.9.0...v0.10.0