pub struct SqliteProcessRegistry { /* private fields */ }Expand description
SQLite-backed process registry for one configured runtime deployment.
It is intentionally separate from Store: session databases persist one
conversation, while this registry persists background process state and
handle visibility across all sessions sharing the registry.
Implementations§
Trait Implementations§
Source§impl ProcessRegistry for SqliteProcessRegistry
impl ProcessRegistry for SqliteProcessRegistry
Source§fn durability_tier(&self) -> DurabilityTier
fn durability_tier(&self) -> DurabilityTier
Durability tier this process registry provides; defaults to
DurabilityTier::Inline.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,
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,
Attach a durable backend reference to a registered process. Read more
fn grant_handle<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
session_scope: &'life1 SessionScope,
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,
session_scope: &'life1 SessionScope,
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 SessionScope,
to_scope: &'life2 SessionScope,
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,
session_scope: &'life1 SessionScope,
) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessHandleGrantEntry>, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_live_handle_grants<'life0, 'life1, 'async_trait>(
&'life0 self,
session_scope: &'life1 SessionScope,
) -> 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,
session_scope: &'life1 SessionScope,
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,
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,
Source§fn count_events_through<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
process_id: &'life1 str,
event_type: &'life2 str,
up_to_sequence: u64,
) -> Pin<Box<dyn Future<Output = Result<u64, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn count_events_through<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
process_id: &'life1 str,
event_type: &'life2 str,
up_to_sequence: u64,
) -> Pin<Box<dyn Future<Output = Result<u64, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn recent_events<'life0, 'life1, 'async_trait>(
&'life0 self,
process_id: &'life1 str,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessEvent>, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn recent_events<'life0, 'life1, 'async_trait>(
&'life0 self,
process_id: &'life1 str,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessEvent>, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
The most recent
limit events, in ascending sequence order. Read morefn 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 complete_process<'life0, 'life1, 'async_trait>(
&'life0 self,
process_id: &'life1 str,
await_output: ProcessAwaitOutput,
authority: ProcessCompletionAuthority,
) -> Pin<Box<dyn Future<Output = Result<ProcessRecord, 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,
authority: ProcessCompletionAuthority,
) -> Pin<Box<dyn Future<Output = Result<ProcessRecord, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Complete a process without a Lash process lease, under an explicit,
auditable completion authority. Read more
Source§fn complete_process_with_lease<'life0, 'life1, 'async_trait>(
&'life0 self,
lease: &'life1 ProcessLease,
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 complete_process_with_lease<'life0, 'life1, 'async_trait>(
&'life0 self,
lease: &'life1 ProcessLease,
await_output: ProcessAwaitOutput,
) -> Pin<Box<dyn Future<Output = Result<ProcessRecord, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Atomically append the terminal output while the supplied process lease
is still current, then release that lease in the same transaction. Read more
Source§fn record_first_started<'life0, 'life1, 'async_trait>(
&'life0 self,
process_id: &'life1 str,
started: ProcessStarted,
) -> Pin<Box<dyn Future<Output = Result<ProcessRecord, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn record_first_started<'life0, 'life1, 'async_trait>(
&'life0 self,
process_id: &'life1 str,
started: ProcessStarted,
) -> Pin<Box<dyn Future<Output = Result<ProcessRecord, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Record the durable, lease-fenced “execution started” fact (ADR 0019). Read more
Source§fn request_process_abandon<'life0, 'life1, 'async_trait>(
&'life0 self,
process_id: &'life1 str,
request: AbandonRequest,
) -> Pin<Box<dyn Future<Output = Result<ProcessRecord, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn request_process_abandon<'life0, 'life1, 'async_trait>(
&'life0 self,
process_id: &'life1 str,
request: AbandonRequest,
) -> Pin<Box<dyn Future<Output = Result<ProcessRecord, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Set the durable, non-terminal Abandon Request marker (ADR 0019). Read more
fn set_process_wait<'life0, 'life1, 'async_trait>(
&'life0 self,
process_id: &'life1 str,
wait: WaitState,
) -> Pin<Box<dyn Future<Output = Result<ProcessRecord, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn clear_process_wait<'life0, 'life1, 'async_trait>(
&'life0 self,
process_id: &'life1 str,
) -> 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 list_processes<'life0, 'life1, 'async_trait>(
&'life0 self,
filter: &'life1 ProcessListFilter,
) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessRecord>, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn processes_changed_since<'life0, 'async_trait>(
&'life0 self,
cursor: ProcessChangeCursor,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<(Vec<ProcessRecord>, ProcessChangeCursor), PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn processes_changed_since<'life0, 'async_trait>(
&'life0 self,
cursor: ProcessChangeCursor,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<(Vec<ProcessRecord>, ProcessChangeCursor), PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Return process records whose persisted row changed strictly after
cursor, ordered by the backend’s per-store change sequence. Read morefn 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,
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. Read moreSource§fn live_reference_summary<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessLiveReferenceSummary>, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn live_reference_summary<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<ProcessLiveReferenceSummary>, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Count non-terminal process rows by their captured definition and
execution-environment references.
Source§fn claim_process_lease<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
process_id: &'life1 str,
owner: &'life2 LeaseOwnerIdentity,
lease_ttl_ms: u64,
) -> Pin<Box<dyn Future<Output = Result<ProcessLeaseClaimOutcome, 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: &'life2 LeaseOwnerIdentity,
lease_ttl_ms: u64,
) -> Pin<Box<dyn Future<Output = Result<ProcessLeaseClaimOutcome, 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. Read more
Source§fn reclaim_process_lease<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
process_id: &'life1 str,
owner: &'life2 LeaseOwnerIdentity,
observed_holder: &'life3 ProcessLease,
lease_ttl_ms: u64,
) -> Pin<Box<dyn Future<Output = Result<ProcessLeaseClaimOutcome, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn reclaim_process_lease<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
process_id: &'life1 str,
owner: &'life2 LeaseOwnerIdentity,
observed_holder: &'life3 ProcessLease,
lease_ttl_ms: u64,
) -> Pin<Box<dyn Future<Output = Result<ProcessLeaseClaimOutcome, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Reclaim an unexpired process lease whose observed holder is definitely
dead according to persisted local-process liveness metadata. Read more
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,
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. Read more
Source§fn get_process_lease<'life0, 'life1, 'async_trait>(
&'life0 self,
process_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<ProcessLease>, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_process_lease<'life0, 'life1, 'async_trait>(
&'life0 self,
process_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<ProcessLease>, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Read the current lease row for a process without claiming it. Read more
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,
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). Read moreSource§fn prune_terminal_processes<'life0, 'async_trait>(
&'life0 self,
cutoff_epoch_ms: u64,
filter: Option<ProcessListFilter>,
up_to_change_seq: Option<ProcessChangeCursor>,
) -> Pin<Box<dyn Future<Output = Result<ProcessPruneReport, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn prune_terminal_processes<'life0, 'async_trait>(
&'life0 self,
cutoff_epoch_ms: u64,
filter: Option<ProcessListFilter>,
up_to_change_seq: Option<ProcessChangeCursor>,
) -> Pin<Box<dyn Future<Output = Result<ProcessPruneReport, PluginError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Physically delete terminal process rows whose
updated_at_ms is older
than cutoff_epoch_ms, match filter when one is supplied, and have a
process change sequence no later than up_to_change_seq when supplied,
together with their events, wake acks, handle grants, lease rows, and
trigger-delivery reservations whose deterministic process id points at a
pruned row.
Host-scheduled retention: hosts that project results/events into their
own store call this to keep the registry bounded. Non-terminal rows are
never touched. Callers must choose a retention window comfortably longer
than any waiter lifetime — a pruned process id becomes “unknown process”
to late awaits. Re-emitting the same trigger occurrence id after its
process has aged out of retention may reserve a fresh delivery process
id; occurrence-level idempotency still holds, and ordinary emit replays
do not straddle a retention window in practice. Read moreAuto Trait Implementations§
impl Freeze for SqliteProcessRegistry
impl RefUnwindSafe for SqliteProcessRegistry
impl Send for SqliteProcessRegistry
impl Sync for SqliteProcessRegistry
impl Unpin for SqliteProcessRegistry
impl UnsafeUnpin for SqliteProcessRegistry
impl UnwindSafe for SqliteProcessRegistry
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more