pub enum RunStatus {
Pending,
Running,
Completed,
Failed,
Retrying,
Cancelled,
AwaitingApproval,
Warning,
Sleeping,
Paused,
}Expand description
Status of a workflow run, forming a finite state machine.
Valid transitions:
Pending->Running,CancelledRunning->Pending(worker lease expired),Completed,Failed,Warning,Retrying,Cancelled,AwaitingApproval,SleepingRetrying->Running,Failed,CancelledAwaitingApproval->Running,Pending(requeued for a worker underExecutionMode::Workers),Failed,CancelledSleeping->Pending(wake-up timer elapsed),CancelledPending,Retrying,Sleeping,AwaitingApproval,Running->Paused(operator pause)Paused->Pending,Running,Retrying,Sleeping,AwaitingApproval(resume),Failed(rejection decided while paused),Cancelled
Terminal states (Completed, Failed, Warning, Cancelled) are idempotent:
transitioning to the same terminal state is a no-op, not an error.
§Examples
use ironflow_store::entities::RunStatus;
assert!(RunStatus::Pending.can_transition_to(&RunStatus::Running));
assert!(!RunStatus::Pending.can_transition_to(&RunStatus::Completed));
assert!(!RunStatus::Completed.can_transition_to(&RunStatus::Running));
assert!(RunStatus::Running.can_transition_to(&RunStatus::AwaitingApproval));
assert!(RunStatus::Running.can_transition_to(&RunStatus::Warning));
// A run whose worker lease expired goes back to the queue:
assert!(RunStatus::Running.can_transition_to(&RunStatus::Pending));
assert!(RunStatus::AwaitingApproval.can_transition_to(&RunStatus::Running));
assert!(RunStatus::AwaitingApproval.can_transition_to(&RunStatus::Pending));
assert!(RunStatus::Running.can_transition_to(&RunStatus::Sleeping));
assert!(RunStatus::Sleeping.can_transition_to(&RunStatus::Pending));
assert!(RunStatus::Sleeping.can_transition_to(&RunStatus::Cancelled));
assert!(RunStatus::Running.can_transition_to(&RunStatus::Paused));
assert!(RunStatus::Paused.can_transition_to(&RunStatus::Pending));
// Terminal-to-same is idempotent:
assert!(RunStatus::Failed.can_transition_to(&RunStatus::Failed));
assert!(RunStatus::Completed.can_transition_to(&RunStatus::Completed));
assert!(RunStatus::Warning.can_transition_to(&RunStatus::Warning));
assert!(RunStatus::Cancelled.can_transition_to(&RunStatus::Cancelled));JSON schema
{
"description": "Status of a workflow run, forming a finite state machine.\n\nValid transitions:\n- `Pending` -> `Running`, `Cancelled`\n- `Running` -> `Pending` (worker lease expired), `Completed`, `Failed`, `Warning`, `Retrying`, `Cancelled`, `AwaitingApproval`, `Sleeping`\n- `Retrying` -> `Running`, `Failed`, `Cancelled`\n- `AwaitingApproval` -> `Running`, `Pending` (requeued for a worker under `ExecutionMode::Workers`), `Failed`, `Cancelled`\n- `Sleeping` -> `Pending` (wake-up timer elapsed), `Cancelled`\n- `Pending`, `Retrying`, `Sleeping`, `AwaitingApproval`, `Running` -> `Paused` (operator pause)\n- `Paused` -> `Pending`, `Running`, `Retrying`, `Sleeping`, `AwaitingApproval` (resume),\n `Failed` (rejection decided while paused), `Cancelled`\n\nTerminal states (`Completed`, `Failed`, `Warning`, `Cancelled`) are idempotent:\ntransitioning to the same terminal state is a no-op, not an error.\n\n# Examples\n\n```\nuse ironflow_store::entities::RunStatus;\n\nassert!(RunStatus::Pending.can_transition_to(&RunStatus::Running));\nassert!(!RunStatus::Pending.can_transition_to(&RunStatus::Completed));\nassert!(!RunStatus::Completed.can_transition_to(&RunStatus::Running));\nassert!(RunStatus::Running.can_transition_to(&RunStatus::AwaitingApproval));\nassert!(RunStatus::Running.can_transition_to(&RunStatus::Warning));\n// A run whose worker lease expired goes back to the queue:\nassert!(RunStatus::Running.can_transition_to(&RunStatus::Pending));\nassert!(RunStatus::AwaitingApproval.can_transition_to(&RunStatus::Running));\nassert!(RunStatus::AwaitingApproval.can_transition_to(&RunStatus::Pending));\nassert!(RunStatus::Running.can_transition_to(&RunStatus::Sleeping));\nassert!(RunStatus::Sleeping.can_transition_to(&RunStatus::Pending));\nassert!(RunStatus::Sleeping.can_transition_to(&RunStatus::Cancelled));\nassert!(RunStatus::Running.can_transition_to(&RunStatus::Paused));\nassert!(RunStatus::Paused.can_transition_to(&RunStatus::Pending));\n// Terminal-to-same is idempotent:\nassert!(RunStatus::Failed.can_transition_to(&RunStatus::Failed));\nassert!(RunStatus::Completed.can_transition_to(&RunStatus::Completed));\nassert!(RunStatus::Warning.can_transition_to(&RunStatus::Warning));\nassert!(RunStatus::Cancelled.can_transition_to(&RunStatus::Cancelled));\n```",
"type": "string",
"enum": [
"pending",
"running",
"completed",
"failed",
"retrying",
"cancelled",
"awaiting_approval",
"warning",
"sleeping",
"paused"
]
}
```ignore
</details>Variants§
Trait Implementations§
impl Copy for RunStatus
Source§impl<'de> Deserialize<'de> for RunStatus
impl<'de> Deserialize<'de> for RunStatus
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl Eq for RunStatus
Source§impl Ord for RunStatus
impl Ord for RunStatus
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§fn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the minimum of two values. Read more
Source§impl PartialOrd for RunStatus
impl PartialOrd for RunStatus
impl StructuralPartialEq for RunStatus
Source§impl TryFrom<&String> for RunStatus
impl TryFrom<&String> for RunStatus
Source§type Error = ConversionError
type Error = ConversionError
The type returned in the event of a conversion error.
Auto Trait Implementations§
impl Freeze for RunStatus
impl RefUnwindSafe for RunStatus
impl Send for RunStatus
impl Sync for RunStatus
impl Unpin for RunStatus
impl UnsafeUnpin for RunStatus
impl UnwindSafe for RunStatus
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more