pub enum SagaOutcome {
Completed,
Failed {
reason: String,
},
FailedCompensation {
reason: String,
},
}Expand description
Outcome of a launcher saga, written by terminate_saga.
PR LSD-1 declares all variants up-front so the LSD-2 coordinator
wiring + LSD-3 recovery walker can land without further enum
edits. dead_code is suppressed at the enum level because every
variant is wired in a follow-up PR — opt-in suppression at the
type avoids per-variant #[allow] clutter.
Mirrors srv’s SagaOutcome shape but adds FailedCompensation
(LSD spec §3.5 — recovery-walker terminal state) and removes
Compensated (no auto-compensation in launcher sagas yet).
PR LSD-2 calls terminate_saga(.., Completed) from apply_action
when a saga returns SagaAction::Done, and Failed when a saga
returns SagaAction::Failed or is evicted by the same-kind
concurrent gate. PR LSD-3 calls mark_failed_compensation
directly from the recovery walker; that path uses the dedicated
helper below rather than terminate_saga(FailedCompensation { .. })
because recovery wants to be idempotent across repeated
crash-restart cycles (the row may already be in
failed_compensation from a prior recovery).
Note: launcher sagas have no Compensated terminal state today
(per LSD spec §3.2 + §7 open question). F.5/F.6 sagas don’t
auto-compensate; the schema CHECK constraint on launcher_saga.state
intentionally omits 'compensated'. If a future class-D/E saga
needs compensation, add the variant + matching CHECK constraint
migration together — never one without the other.
Variants§
Completed
Saga ran to completion successfully. SagaAction::Done path.
Failed
Saga failed with no compensation having run.
FailedCompensation
Saga was unresolved at launcher restart and the recovery walker
marked it as such. Distinct from Failed so operators can
filter for “interesting” cases via --diag sagas.
Constructed by PR LSD-3’s recovery walker (via
mark_failed_compensation); included here for symmetry with
the schema CHECK constraint.
Implementations§
Trait Implementations§
Source§impl Clone for SagaOutcome
impl Clone for SagaOutcome
Source§fn clone(&self) -> SagaOutcome
fn clone(&self) -> SagaOutcome
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more