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§
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,
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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,
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§
Sourcefn durability_tier(&self) -> DurabilityTier
fn durability_tier(&self) -> DurabilityTier
Durability tier this process registry provides; defaults to
DurabilityTier::Inline.
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,
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".