Skip to main content

StepOptions

Struct StepOptions 

Source
pub struct StepOptions<Input> { /* private fields */ }
Expand description

Configures one Step’s handler execution and persistence behavior.

New options preserve server timeout, retry, and durability defaults. wait_for failures fail the Flow by default. Attribute locks apply only to the matching handler call. The type system checks that an execute-failure recovery Step accepts the same input type.

Input is the Step input type and must implement Value. Builders consume the options and return the updated value. Durations must fit signed 32-bit whole seconds; invalid values fail when the Worker maps the Step definition or movement options.

Each method call retains its first loaded state snapshot and Attribute locks across retries and backoff. Later Attribute and Channel changes do not refresh that snapshot. Use a Channel wait in another Step to wait for state changes. Locks are released when the method call ends. A queued first attempt holds no locks before hand-out; a returned or retrying attempt keeps acquired locks while queued. Keep lock scope short to avoid blocking conflicting RPCs.

§Examples

use dex_sdk::{Attribute, RetryPolicy, StepOptions, WaitForFailurePolicy};
use std::time::Duration;

let balance = Attribute::<i64>::new("balance");
let options = StepOptions::<String>::new()
    .execute_method_timeout(Duration::from_secs(30))
    .execute_retry(RetryPolicy::new().maximum_attempts(3))
    .wait_for_failure(WaitForFailurePolicy::Proceed)
    .execute_lock(balance.lock());

Implementations§

Source§

impl<Input: Value> StepOptions<Input>

Source

pub fn new() -> Self

Creates options that preserve server defaults and fail on exhausted wait_for retries.

Source

pub fn wait_for_method_timeout(self, value: Duration) -> Self

Sets the maximum duration of one wait_for handler attempt.

Unset or zero uses two hours. With 1.35.0 (Server protocol 4): the timeout starts at Worker hand-out, excluding queue and lock waits, and is not shortened by retry total duration. Each retry has a new timeout. Cancellation is cooperative; observe Context::is_cancelled and bound external calls with their own timeouts.

Source

pub fn execute_method_timeout(self, value: Duration) -> Self

Sets the maximum duration of one execute handler attempt.

Unset or zero uses two hours. With 1.35.0 (Server protocol 4): the timeout starts at Worker hand-out, excluding queue and lock waits, and is not shortened by retry total duration. Each retry has a new timeout. Cancellation is cooperative; observe Context::is_cancelled and bound external calls with their own timeouts.

Source

pub fn heartbeat_timeout(self, value: Duration) -> Self

Sets the heartbeat timeout for wait_for and execute attempts.

Zero selects the server default of one minute. Positive values must be whole seconds and at least the server-configured minimum, which defaults to ten seconds. This option applies with both synchronous and asynchronous durability. Explicit heartbeats and Stream messages refresh liveness; only heartbeat values carry retry checkpoints. A valueless heartbeat clears the checkpoint; a Stream message preserves it. Raise this limit when healthy work can remain silent for more than a minute. A method timeout still bounds the whole attempt, even when it keeps heartbeating.

Source

pub fn wait_for_retry(self, value: RetryPolicy) -> Self

Sets the retry policy for failed wait_for attempts.

See RetryPolicy for defaults and the shared elapsed budget. Exhaustion fails the Flow unless Self::wait_for_failure selects WaitForFailurePolicy::Proceed.

Source

pub fn execute_retry(self, value: RetryPolicy) -> Self

Sets the retry policy for failed execute attempts.

See RetryPolicy for defaults and the shared elapsed budget. Exhaustion fails the Flow unless Self::on_execute_failure_proceed_to selects a recovery Step.

Source

pub fn wait_for_failure(self, value: WaitForFailurePolicy) -> Self

Selects whether exhausted wait_for retries fail or advance the Flow.

Source

pub fn on_execute_failure_proceed_to<RecoveryStep>( self, step: &RecoveryStep, ) -> Self
where RecoveryStep: Step<Input = Input>,

Routes exhausted execute failures to a recovery Step with the same input type.

Source

pub fn wait_for_durability(self, value: StepDurability) -> Self

Overrides persistence durability for writes staged by wait_for.

Source

pub fn execute_durability(self, value: StepDurability) -> Self

Overrides persistence durability for writes staged by execute.

Source

pub fn wait_for_lock(self, value: AttributeLock) -> Self

Adds an Attribute lock held for the wait_for invocation.

Source

pub fn execute_lock(self, value: AttributeLock) -> Self

Adds an Attribute lock held for the execute invocation.

Source

pub fn wait_for_load_attribute_map<T>( self, attribute_map: &AttributeMap<T>, ) -> Self

Loads every current instance of attribute_map for wait_for.

Source

pub fn wait_for_load_attribute_map_instance( self, load: AttributeMapLoad, ) -> Self

Loads one AttributeMap instance for wait_for.

Source

pub fn wait_for_load_channel<T>(self, channel: &Channel<T>) -> Self

Loads one Channel’s pending messages for wait_for.

Source

pub fn wait_for_load_channel_map<T>(self, channel_map: &ChannelMap<T>) -> Self

Loads every current ChannelMap instance’s pending messages for wait_for.

Source

pub fn wait_for_load_channel_map_instance(self, load: ChannelMapLoad) -> Self

Loads one ChannelMap instance’s pending messages for wait_for.

Source

pub fn execute_load_attribute_map<T>( self, attribute_map: &AttributeMap<T>, ) -> Self

Loads every current instance of attribute_map for execute.

Source

pub fn execute_load_attribute_map_instance(self, load: AttributeMapLoad) -> Self

Loads one AttributeMap instance for execute.

Source

pub fn execute_load_channel<T>(self, channel: &Channel<T>) -> Self

Loads one Channel’s pending messages for execute.

Source

pub fn execute_load_channel_map<T>(self, channel_map: &ChannelMap<T>) -> Self

Loads every current ChannelMap instance’s pending messages for execute.

Source

pub fn execute_load_channel_map_instance(self, load: ChannelMapLoad) -> Self

Loads one ChannelMap instance’s pending messages for execute.

Trait Implementations§

Source§

impl<Input: Value> Default for StepOptions<Input>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<Input> Forget for StepOptions<Input>

§

impl<Input> Freeze for StepOptions<Input>
where PhantomData<fn(Input)>: Freeze,

§

impl<Input> RefUnwindSafe for StepOptions<Input>
where PhantomData<fn(Input)>: RefUnwindSafe,

§

impl<Input> Send for StepOptions<Input>
where PhantomData<fn(Input)>: Send,

§

impl<Input> Sync for StepOptions<Input>
where PhantomData<fn(Input)>: Sync,

§

impl<Input> Unpin for StepOptions<Input>
where PhantomData<fn(Input)>: Unpin,

§

impl<Input> UnsafeUnpin for StepOptions<Input>
where PhantomData<fn(Input)>: UnsafeUnpin,

§

impl<Input> UnwindSafe for StepOptions<Input>
where PhantomData<fn(Input)>: UnwindSafe,

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<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
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 = !

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

fn try_from(value: U) -> Result<T, !>

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<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