pub struct WorkflowExecutor { /* private fields */ }Expand description
Workflow executor.
Implementations§
Source§impl WorkflowExecutor
impl WorkflowExecutor
Sourcepub fn new(task_executor: Arc<dyn TaskExecutor>) -> Self
pub fn new(task_executor: Arc<dyn TaskExecutor>) -> Self
Create a new workflow executor.
Sourcepub fn with_flush_threshold(self, threshold: usize) -> Self
pub fn with_flush_threshold(self, threshold: usize) -> Self
Override the batch-flush threshold (number of buffered updates that
trigger an automatic flush to persistence). Default is
DEFAULT_FLUSH_THRESHOLD.
Sourcepub fn buffer_status_update(&self, update: StatusUpdate) -> Result<()>
pub fn buffer_status_update(&self, update: StatusUpdate) -> Result<()>
Buffer a status update. When the buffer reaches buffer_flush_threshold
entries it is flushed automatically.
§Errors
Returns an error if the internal mutex is poisoned.
Sourcepub fn flush_status_buffer(&self) -> Result<()>
pub fn flush_status_buffer(&self) -> Result<()>
Flush all buffered status updates in one batch.
This is called automatically when the buffer threshold is reached and
should also be called on graceful shutdown or test teardown via
Self::flush.
§Errors
Returns an error if the internal mutex is poisoned.
Sourcepub fn flush(&self) -> Result<()>
pub fn flush(&self) -> Result<()>
Flush any remaining buffered status updates. Call this on graceful shutdown or at the end of a test to ensure all updates are persisted.
§Errors
Returns an error if the internal mutex is poisoned.
Sourcepub fn buffered_update_count(&self) -> Result<usize>
pub fn buffered_update_count(&self) -> Result<usize>
Return the number of updates currently in the buffer (for testing).
§Errors
Returns an error if the internal mutex is poisoned.
Sourcepub fn with_max_concurrent(self, max_concurrent: usize) -> Self
pub fn with_max_concurrent(self, max_concurrent: usize) -> Self
Set maximum concurrent tasks.
Sourcepub fn with_timeout(self, timeout: Duration) -> Self
pub fn with_timeout(self, timeout: Duration) -> Self
Set execution timeout.
Sourcepub fn pause(&self)
pub fn pause(&self)
Signal the executor to pause after the current in-flight tasks finish.
The executor stops launching new tasks as soon as it receives the signal, but any already-running tasks are allowed to complete.
Sourcepub fn send_control(&self, control: WorkflowControl) -> Result<()>
pub fn send_control(&self, control: WorkflowControl) -> Result<()>
Send a WorkflowControl signal to the executor.
WorkflowControl::Pause— equivalent toSelf::pause.WorkflowControl::Resume— equivalent toSelf::resume.WorkflowControl::Cancel— signals the executor to abort after the current task wave finishes and return a cancellation error.
§Errors
Returns WorkflowError if the underlying channel is closed (i.e. the
executor has already been dropped).
Sourcepub fn is_paused(&self) -> bool
pub fn is_paused(&self) -> bool
Returns true when the executor is currently in a paused state.
This reflects the latest value sent via Self::pause /
Self::send_control. It does not guarantee that execution has
actually stopped; in-flight tasks may still be running.
Sourcepub fn resume_from_checkpoint(&mut self, checkpoint_json: &str) -> Result<()>
pub fn resume_from_checkpoint(&mut self, checkpoint_json: &str) -> Result<()>
Load a prior ExecutionCheckpoint so that already-completed tasks are
skipped when Self::execute is called next.
§Errors
Returns an error if the checkpoint JSON is invalid.
Sourcepub async fn execute(&self, workflow: &mut Workflow) -> Result<ExecutionResult>
pub async fn execute(&self, workflow: &mut Workflow) -> Result<ExecutionResult>
Execute a workflow.
Tasks whose dependencies are all satisfied at the same time are launched
concurrently (fan-out). The executor waits for all of them before
considering their successors (fan-in), bounded by max_concurrent.
If a checkpoint was loaded via Self::resume_from_checkpoint the
corresponding tasks are pre-marked as completed and skipped.
The executor checks the pause signal between task waves; when paused it
drains the current in-flight tasks, serialises a checkpoint, and returns
WorkflowState::Paused in the ExecutionResult.
§Ordering invariant
The scheduler rescans not-yet-dispatched tasks every pass instead of
consuming a single-pass iterator, so a task whose dependencies are not
yet satisfied is retried on a later pass rather than permanently
skipped. WorkflowState::Completed is only returned once every task
has actually been dispatched (run, synthetically completed, or
skipped) and no task failed; otherwise the result is
WorkflowState::Failed (or an Err for an unrecoverable scheduling
deadlock), never a fabricated Completed.