Table of Contents

Enum NestedSagaPolicy

Namespace
Millrace.Workflows
Assembly
Millrace.dll

What becomes of a nested saga that has already committed, when the saga around it unwinds (§11.35).

public enum NestedSagaPolicy

Fields

Unwind = 0

An outer unwind undoes this saga too, innermost step first.

The inner saga's completed steps stay on the cursor after it commits, so the outer has something to replay, and the outer records the inner saga as one of its own steps.

Keep = 1

Once this saga commits it stands; an outer unwind undoes only its own direct steps.

The inner saga's record is dropped on commit, exactly as a top-level saga's is. Choosing this means the outer saga can no longer promise all-or-nothing across the nested part, which is a real cost and sometimes the correct one.

Remarks

There is no default, and that is the point. §11.29 settled the other direction — a failing inner saga unwinds itself and then propagates outward — by arguing that an outer saga's promise is broken if something nested inside it lets the outer proceed past work that did not happen. The mirror of that argument says a completed inner saga should be undone with the outer.

But the mirror is not always right. An inner saga that charged a card through a provider with no reversal, or that told a third party something true at the time, is final: replaying its compensations would be a second wrong rather than an undo. Only the author knows which they wrote, so only the author can say.