ActivityContext

Struct ActivityContext 

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

User-facing orchestration context for scheduling and replay-safe helpers. Context provided to activities for logging and metadata access.

Unlike OrchestrationContext, activities are leaf nodes that cannot schedule new work, but they often need to emit structured logs and inspect orchestration metadata. The ActivityContext exposes the parent orchestration information and trace helpers that log with full correlation fields.

§Examples

let activities = ActivityRegistry::builder()
    .register("ProvisionVM", |ctx: ActivityContext, config: String| async move {
        ctx.trace_info(format!("Provisioning VM with config: {}", config));
         
        // Do actual work (can use sleep, HTTP, etc.)
        let vm_id = provision_vm_internal(config).await?;
         
        ctx.trace_info(format!("VM provisioned: {}", vm_id));
        Ok(vm_id)
    })
    .build();

§Metadata Access

Activity context provides access to orchestration correlation metadata:

  • instance_id() - Orchestration instance identifier
  • execution_id() - Execution number (for ContinueAsNew scenarios)
  • orchestration_name() - Parent orchestration name
  • orchestration_version() - Parent orchestration version
  • activity_name() - Current activity name

§Cancellation Support

Activities can respond to cancellation when their parent orchestration reaches a terminal state:

  • is_cancelled() - Check if cancellation has been requested
  • cancelled() - Future that completes when cancellation is requested (for use with tokio::select!)
  • cancellation_token() - Get a clone of the token for spawned tasks

§Determinism

Activity trace helpers (trace_info, trace_warn, etc.) do not participate in deterministic replay. They emit logs directly using tracing and should only be used for diagnostic purposes.

Implementations§

Source§

impl ActivityContext

Source

pub fn instance_id(&self) -> &str

Returns the orchestration instance identifier.

Source

pub fn execution_id(&self) -> u64

Returns the execution id within the orchestration instance.

Source

pub fn orchestration_name(&self) -> &str

Returns the parent orchestration name.

Source

pub fn orchestration_version(&self) -> &str

Returns the parent orchestration version.

Source

pub fn activity_name(&self) -> &str

Returns the activity name being executed.

Source

pub fn worker_id(&self) -> &str

Returns the worker dispatcher ID processing this activity.

Source

pub fn trace_info(&self, message: impl Into<String>)

Emit an INFO level trace entry associated with this activity.

Source

pub fn trace_warn(&self, message: impl Into<String>)

Emit a WARN level trace entry associated with this activity.

Source

pub fn trace_error(&self, message: impl Into<String>)

Emit an ERROR level trace entry associated with this activity.

Source

pub fn trace_debug(&self, message: impl Into<String>)

Emit a DEBUG level trace entry associated with this activity.

Source

pub fn is_cancelled(&self) -> bool

Check if cancellation has been requested.

Returns true if the parent orchestration has completed, failed, or been cancelled. Activities can use this for cooperative cancellation.

§Example
for item in items {
    if ctx.is_cancelled() {
        return Err("Activity cancelled".into());
    }
    process(item).await;
}
Source

pub async fn cancelled(&self)

Returns a future that completes when cancellation is requested.

Use with tokio::select! for interruptible activities. This allows activities to respond promptly to cancellation without polling.

§Example
tokio::select! {
    result = do_work() => return result,
    _ = ctx.cancelled() => return Err("Cancelled".into()),
}
Source

pub fn cancellation_token(&self) -> CancellationToken

Get a clone of the cancellation token for use in spawned tasks.

If your activity spawns child tasks with tokio::spawn(), you should pass them this token so they can also respond to cancellation.

Important: If you spawn additional tasks/threads and do not pass them the cancellation token, they may outlive the activity’s cancellation/abort. This is user error - the runtime provides the signal but cannot guarantee termination of arbitrary spawned work.

§Example
let token = ctx.cancellation_token();
let handle = tokio::spawn(async move {
    loop {
        tokio::select! {
            _ = do_work() => {}
            _ = token.cancelled() => break,
        }
    }
});
Source

pub fn get_client(&self) -> Client

Get a Client for management operations.

This allows activities to perform management operations such as pruning old executions, deleting instances, or querying instance status.

§Example: Self-Pruning Eternal Orchestration
// Activity that prunes old executions
async fn prune_self(ctx: ActivityContext, _input: String) -> Result<String, String> {
    let client = ctx.get_client();
    let instance_id = ctx.instance_id();

    let result = client.prune_executions(instance_id, PruneOptions {
        keep_last: Some(1), // Keep only current execution
        ..Default::default()
    }).await.map_err(|e| e.to_string())?;

    Ok(format!("Pruned {} executions", result.executions_deleted))
}

Trait Implementations§

Source§

impl Clone for ActivityContext

Source§

fn clone(&self) -> ActivityContext

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ActivityContext

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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<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