pub struct DurableProcessWorker { /* private fields */ }Expand description
Reconstructable background-process worker.
Implementations§
Source§impl DurableProcessWorker
impl DurableProcessWorker
pub fn new(config: DurableProcessWorkerConfig) -> Self
pub fn config(&self) -> &DurableProcessWorkerConfig
pub async fn run_process( &self, registration: ProcessRegistration, execution_context: ProcessExecutionContext, cancellation: CancellationToken, ) -> Result<ProcessAwaitOutput, PluginError>
pub async fn run_process_with_scoped_effect_controller( &self, registration: ProcessRegistration, execution_context: ProcessExecutionContext, scoped_effect_controller: ScopedEffectController<'_>, cancellation: CancellationToken, ) -> Result<ProcessAwaitOutput, PluginError>
Sourcepub async fn drive_pending_processes(&self) -> Result<(), PluginError>
pub async fn drive_pending_processes(&self) -> Result<(), PluginError>
Sweep the registry for non-terminal processes and re-execute the ones this worker can claim, driving each to a terminal state.
This is the crash-recovery counterpart to a worker that ran a process from a live turn: a trigger/host-event-started process whose worker died mid-flight is left non-terminal in the registry, and a subsequent worker reopening that registry must finish it. The sweep:
- lists every non-terminal process (
ProcessRegistry::list_non_terminal); - claims the durable single-owner
ProcessLeaseover each — a process already leased live by another owner is skipped (it is being run by that owner right now), so a non-terminal process is re-run by exactly one owner (lease fencing); - runs the claimed process on this worker’s wired controller, renewing the lease across the long-running execution so a healthy recovery is not swept out from under itself;
- writes the terminal outcome and releases the lease.
Idempotent by process_id: terminal processes are never in the worklist,
and a process that became terminal between the list and the claim is
detected after claiming and skipped, so re-running a recovery sweep does
not double-execute completed work.
pub async fn request_process_cancel( &self, process_id: &str, reason: Option<String>, ) -> Result<(), PluginError>
Trait Implementations§
Source§impl Clone for DurableProcessWorker
impl Clone for DurableProcessWorker
Source§fn clone(&self) -> DurableProcessWorker
fn clone(&self) -> DurableProcessWorker
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for DurableProcessWorker
impl !UnwindSafe for DurableProcessWorker
impl Freeze for DurableProcessWorker
impl Send for DurableProcessWorker
impl Sync for DurableProcessWorker
impl Unpin for DurableProcessWorker
impl UnsafeUnpin for DurableProcessWorker
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