Modules
github.com/dangra/durable@v0.10.0github.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.stepanddurable.v1.pipelineoptions 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
stepslist option is gone. Generated step types arePipeline_Step. - One handler interface per pipeline (#93, #96).
NewXxx(h XxxHandlers)takes one implementation with a method per step,Unwind<Step>per unwinding step, andReduceOutput/ReduceFailurewhen the pipeline declares outputs. Per-step handler types andXxxFuncadapters are gone; handler methods receiveXxxInvocation, adurable.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 setpipelinedef.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.PreemptedErrorcause and anything but success resolves it as canceled; reduction is uncancellable; a park cascades to its targets only withdurable.WithCancelCascade().CancelRequested,FailFastOnCancel, andYieldare removed. - Shutdown interrupts, it does not fail (#89). An attempt cut by
Stopthat returns an ordinary error records no last error and no retry backoff; observers seeAttemptInterrupted. - Run classes and unbounded workers (#87, #88).
run_classon a pipeline plusengine.WithRunClassbound started nonterminal Runs with an eligibility-ordered line; workers are unbounded unlessWithConcurrencyis 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