Skip to main content

WorkflowExecutor

Struct WorkflowExecutor 

Source
pub struct WorkflowExecutor { /* private fields */ }
Expand description

Workflow executor.

Implementations§

Source§

impl WorkflowExecutor

Source

pub fn new(task_executor: Arc<dyn TaskExecutor>) -> Self

Create a new workflow executor.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

pub fn with_max_concurrent(self, max_concurrent: usize) -> Self

Set maximum concurrent tasks.

Source

pub fn with_timeout(self, timeout: Duration) -> Self

Set execution timeout.

Source

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.

Source

pub fn resume(&self)

Resume a previously paused executor (un-pause).

Source

pub fn send_control(&self, control: WorkflowControl) -> Result<()>

Send a WorkflowControl signal to the executor.

§Errors

Returns WorkflowError if the underlying channel is closed (i.e. the executor has already been dropped).

Source

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.

Source

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.

Source

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.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more