pub struct DispatchHandle(/* private fields */);Expand description
Dynamic-dispatch wrapper around Arc<WorkerPool> — the one concrete
DispatchEngine impl today. Extract this into nzb-dispatch in Phase B.
Implementations§
Source§impl DispatchHandle
impl DispatchHandle
pub fn new(pool: Arc<WorkerPool>) -> Self
Sourcepub fn pool(&self) -> &Arc<WorkerPool>
pub fn pool(&self) -> &Arc<WorkerPool>
Escape hatch: access the underlying pool. Intended for callers that still need pool-specific APIs not yet promoted to the trait (none today, but keeps the migration incremental).
Trait Implementations§
Source§impl DispatchEngine for DispatchHandle
impl DispatchEngine for DispatchHandle
Source§fn start(&self)
fn start(&self)
Spawn workers for all currently enabled servers and start the
supervisor task. Idempotent (safe to call more than once).
Source§fn submit_job(&self, job: &NzbJob, progress_tx: Sender<ProgressUpdate>)
fn submit_job(&self, job: &NzbJob, progress_tx: Sender<ProgressUpdate>)
Register a new job and begin dispatching its unfinished articles.
Progress is streamed to
progress_tx as ProgressUpdates; the
channel is closed when the job reaches a terminal state.Source§fn pause_job(&self, job_id: &str)
fn pause_job(&self, job_id: &str)
Pause dispatch for
job_id. In-flight articles finish; no new work
is popped for this job until resume_job.Source§fn resume_job(&self, job_id: &str)
fn resume_job(&self, job_id: &str)
Resume a paused job.
Source§fn cancel_job(&self, job_id: &str)
fn cancel_job(&self, job_id: &str)
Cancel
job_id. In-flight articles may still complete but their
results are discarded; no terminal progress update is emitted beyond
the one triggered by cancellation.Source§fn abort_job(&self, job_id: &str, reason: String)
fn abort_job(&self, job_id: &str, reason: String)
Abort
job_id with a human-readable reason. Emits
ProgressUpdate::JobAborted once outstanding articles drain.Source§fn reconcile_servers(&self)
fn reconcile_servers(&self)
Re-read the server list and adjust workers to match. Call after any
mutation to the server config (add, remove, enable, disable, resize).
Source§fn set_max_worker_idle(&self, d: Duration)
fn set_max_worker_idle(&self, d: Duration)
Override the idle-worker eviction threshold. Tests shrink this to
make the watchdog converge in seconds; production uses the default.
Source§fn eviction_count(&self) -> u64
fn eviction_count(&self) -> u64
Lifetime count of worker evictions performed by the heartbeat
watchdog. Increases by 1 each time the supervisor reclaims a stalled
worker. Useful for tests and observability.
Source§fn shutdown<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn shutdown<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Gracefully shut down: stop accepting new work, signal all workers,
and wait for the supervisor to exit.
Source§fn server_stats_snapshot(&self) -> Vec<(String, ServerAttemptStats)>
fn server_stats_snapshot(&self) -> Vec<(String, ServerAttemptStats)>
Snapshot of per-server lifetime attempt counters. Used by the
queue manager to emit a diagnostic breakdown alongside a job abort
— distinguishes “server returned 430 for every article” (dead NZB)
from “server had auth errors” (transient). Default is empty for
engines that don’t track per-server stats.
Auto Trait Implementations§
impl Freeze for DispatchHandle
impl !RefUnwindSafe for DispatchHandle
impl Send for DispatchHandle
impl Sync for DispatchHandle
impl Unpin for DispatchHandle
impl UnsafeUnpin for DispatchHandle
impl !UnwindSafe for DispatchHandle
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
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more