Xvc Pipelines State Machine
Xvc pipelines use a state machine to track the progress of each step. Each step has a state that is updated as the pipeline is executed.
stateDiagram-v2 [*] --> Begin Begin --> DoneWithoutRunning: RunNever Begin --> WaitingDependencySteps: RunConditional WaitingDependencySteps --> WaitingDependencySteps: DependencyStepsRunning WaitingDependencySteps --> CheckingMissingDependencies: DependencyStepsFinishedSuccessfully WaitingDependencySteps --> Broken: DependencyStepsFinishedBroken WaitingDependencySteps --> CheckingMissingDependencies: DependencyStepsFinishedBrokenIgnored CheckingMissingDependencies --> CheckingMissingDependencies: MissingDependenciesIgnored CheckingMissingDependencies --> Broken: HasMissingDependencies CheckingMissingDependencies --> CheckingMissingOutputs: NoMissingDependencies CheckingMissingOutputs --> CheckingMissingOutputs: MissingOutputsIgnored CheckingMissingOutputs --> CheckingTimestamps: NoMissingOutputs CheckingMissingOutputs --> WaitingToRun: HasMissingOutputs CheckingTimestamps --> CheckingTimestamps: TimestampsIgnored CheckingTimestamps --> CheckingDependencyContentDigest: HasNoNewerDependencies CheckingTimestamps --> WaitingToRun: HasNewerDependencies CheckingDependencyContentDigest --> WaitingToRun: ContentDigestIgnored CheckingDependencyContentDigest --> DoneWithoutRunning: ContentDigestNotChanged CheckingDependencyContentDigest --> WaitingToRun: ContentDigestChanged DoneWithoutRunning --> Done: CompletedWithoutRunningStep WaitingToRun --> WaitingToRun: ProcessPoolFull WaitingToRun --> Running: StartProcess WaitingToRun --> Broken: CannotStartProcess Running --> Running: WaitProcess Running --> Broken: ProcessTimeout Running --> Done: ProcessCompletedSuccessfully Running --> Broken: ProcessReturnedNonZero Broken --> Broken: HasBroken Done --> Done: HasDone Done --> [*] Broken --> [*]
A step starts in the Begin
state.
It must wait for all its dependency steps if --when
is set to by_dependencies
(the default) in xvc pipeline step new
or xvc pipeline step update
.
If this option is set to never
, the step will never run and will move to the DoneWithoutRunning
state just after begin.
If this option is set to always
, the step will run regardless of the changes in the dependencies and will move to the
WaitingDependencySteps
even if dependencies are missing, broken, or have not changed.
If --when
option is set to by_dependencies
, the steps check the following conditions before running:
- All dependency steps must be in the
Done
state. - There should be no missing dependency files.
- There should be no broken dependency processes.
- Dependency files should be newer, or the content digest should be different from the step outputs.
If any of these conditions are met, the step will move to the WaitingDependencySteps
state.