Skip to main content

ProcessRegistry

Trait ProcessRegistry 

Source
pub trait ProcessRegistry: Send + Sync {
Show 23 methods // Required methods fn register_process<'life0, 'async_trait>( &'life0 self, registration: ProcessRegistration, ) -> Pin<Box<dyn Future<Output = Result<ProcessRecord, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn set_external_ref<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, external_ref: ProcessExternalRef, ) -> Pin<Box<dyn Future<Output = Result<ProcessRecord, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn grant_handle<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, owner_scope: &'life1 ProcessScope, process_id: &'life2 str, descriptor: ProcessHandleDescriptor, ) -> Pin<Box<dyn Future<Output = Result<ProcessHandleGrant, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait; fn revoke_handle<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, owner_scope: &'life1 ProcessScope, process_id: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<(), PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait; fn transfer_handle_grants<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, from_scope: &'life1 ProcessScope, to_scope: &'life2 ProcessScope, process_ids: &'life3 [String], ) -> Pin<Box<dyn Future<Output = Result<(), PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait; fn list_handle_grants<'life0, 'life1, 'async_trait>( &'life0 self, owner_scope: &'life1 ProcessScope, ) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessHandleGrantEntry>, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn handle_grants_for_process<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessHandleGrant>, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn delete_session_process_state<'life0, 'life1, 'async_trait>( &'life0 self, session_id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<ProcessSessionDeleteReport, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn append_event<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, request: ProcessEventAppendRequest, ) -> Pin<Box<dyn Future<Output = Result<ProcessEventAppendResult, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn events_after<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, after_sequence: u64, ) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessEvent>, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn wake_events_after<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, after_sequence: u64, ) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessEvent>, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn wait_event_after<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, process_id: &'life1 str, event_type: &'life2 str, after_sequence: u64, ) -> Pin<Box<dyn Future<Output = Result<ProcessEvent, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait; fn await_process<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<ProcessAwaitOutput, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn complete_process<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, await_output: ProcessAwaitOutput, ) -> Pin<Box<dyn Future<Output = Result<ProcessRecord, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn get_process<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Option<ProcessRecord>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn ack_wake<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, sequence: u64, ) -> Pin<Box<dyn Future<Output = Result<(), PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn list_non_terminal<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessRecord>, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn claim_process_lease<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, process_id: &'life1 str, owner_id: &'life2 str, lease_ttl_ms: u64, ) -> Pin<Box<dyn Future<Output = Result<ProcessLease, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait; fn renew_process_lease<'life0, 'life1, 'async_trait>( &'life0 self, lease: &'life1 ProcessLease, lease_ttl_ms: u64, ) -> Pin<Box<dyn Future<Output = Result<ProcessLease, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn complete_process_lease<'life0, 'life1, 'async_trait>( &'life0 self, completion: &'life1 ProcessLeaseCompletion, ) -> Pin<Box<dyn Future<Output = Result<(), PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; // Provided methods fn durability_tier(&self) -> DurabilityTier { ... } fn list_live_handle_grants<'life0, 'life1, 'async_trait>( &'life0 self, owner_scope: &'life1 ProcessScope, ) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessHandleGrantEntry>, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait { ... } fn has_handle_grant<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, owner_scope: &'life1 ProcessScope, process_id: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<bool, PluginError>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait { ... }
}
Expand description

Durability-neutral process registry.

Required Methods§

Source

fn register_process<'life0, 'async_trait>( &'life0 self, registration: ProcessRegistration, ) -> Pin<Box<dyn Future<Output = Result<ProcessRecord, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn set_external_ref<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, external_ref: ProcessExternalRef, ) -> Pin<Box<dyn Future<Output = Result<ProcessRecord, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn grant_handle<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, owner_scope: &'life1 ProcessScope, process_id: &'life2 str, descriptor: ProcessHandleDescriptor, ) -> Pin<Box<dyn Future<Output = Result<ProcessHandleGrant, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source

fn revoke_handle<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, owner_scope: &'life1 ProcessScope, process_id: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<(), PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source

fn transfer_handle_grants<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, from_scope: &'life1 ProcessScope, to_scope: &'life2 ProcessScope, process_ids: &'life3 [String], ) -> Pin<Box<dyn Future<Output = Result<(), PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,

Source

fn list_handle_grants<'life0, 'life1, 'async_trait>( &'life0 self, owner_scope: &'life1 ProcessScope, ) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessHandleGrantEntry>, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn handle_grants_for_process<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessHandleGrant>, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn delete_session_process_state<'life0, 'life1, 'async_trait>( &'life0 self, session_id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<ProcessSessionDeleteReport, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn append_event<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, request: ProcessEventAppendRequest, ) -> Pin<Box<dyn Future<Output = Result<ProcessEventAppendResult, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn events_after<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, after_sequence: u64, ) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessEvent>, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn wake_events_after<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, after_sequence: u64, ) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessEvent>, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn wait_event_after<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, process_id: &'life1 str, event_type: &'life2 str, after_sequence: u64, ) -> Pin<Box<dyn Future<Output = Result<ProcessEvent, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source

fn await_process<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<ProcessAwaitOutput, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn complete_process<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, await_output: ProcessAwaitOutput, ) -> Pin<Box<dyn Future<Output = Result<ProcessRecord, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn get_process<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Option<ProcessRecord>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn ack_wake<'life0, 'life1, 'async_trait>( &'life0 self, process_id: &'life1 str, sequence: u64, ) -> Pin<Box<dyn Future<Output = Result<(), PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn list_non_terminal<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessRecord>, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

All non-terminal process records, in stable process_id order.

This is the recovery sweep’s worklist: every process that was started but has not reached a terminal event is a candidate for re-execution by a DurableProcessWorker after a crash. Terminal processes are excluded — they are already done and idempotent by process_id, so re-running them would be wasted work.

Source

fn claim_process_lease<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, process_id: &'life1 str, owner_id: &'life2 str, lease_ttl_ms: u64, ) -> Pin<Box<dyn Future<Output = Result<ProcessLease, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Claim the durable single-owner lease over a non-terminal process.

An unexpired lease held by a different owner fences the claim (returns an error); claiming a free, expired, or own lease succeeds and bumps the fencing_token. The returned ProcessLease’s (owner_id, lease_token) plus fencing_token are the contract a worker presents on every subsequent renew/complete — a stale writer is rejected.

Source

fn renew_process_lease<'life0, 'life1, 'async_trait>( &'life0 self, lease: &'life1 ProcessLease, lease_ttl_ms: u64, ) -> Pin<Box<dyn Future<Output = Result<ProcessLease, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Extend the expiry of a live lease the caller still owns.

The lease must match the persisted (owner, lease_token, fencing_token) and be unexpired, else the renewal is rejected (the lease was superseded or expired). Workers renew across long-running effects so a healthy process is not swept out from under its live owner.

Source

fn complete_process_lease<'life0, 'life1, 'async_trait>( &'life0 self, completion: &'life1 ProcessLeaseCompletion, ) -> Pin<Box<dyn Future<Output = Result<(), PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Release a lease the caller owns, fenced by the completion’s (process_id, lease_token).

Mirrors clearing a runtime turn lease: a stale completion (whose token no longer matches the live lease) is a no-op so it cannot release a lease a newer owner now holds. Idempotent — completing an already-released lease succeeds.

Provided Methods§

Source

fn durability_tier(&self) -> DurabilityTier

Durability tier this process registry provides; defaults to DurabilityTier::Inline.

Source

fn list_live_handle_grants<'life0, 'life1, 'async_trait>( &'life0 self, owner_scope: &'life1 ProcessScope, ) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessHandleGrantEntry>, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn has_handle_grant<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, owner_scope: &'life1 ProcessScope, process_id: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<bool, PluginError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§