pub trait DispatchEngine: Send + Sync {
// Required methods
fn start(&self);
fn submit_job(&self, job: &NzbJob, progress_tx: Sender<ProgressUpdate>);
fn pause_job(&self, job_id: &str);
fn resume_job(&self, job_id: &str);
fn cancel_job(&self, job_id: &str);
fn abort_job(&self, job_id: &str, reason: String);
fn has_job(&self, job_id: &str) -> bool;
fn reconcile_servers(&self);
fn set_max_worker_idle(&self, d: Duration);
fn eviction_count(&self) -> u64;
fn shutdown<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
// Provided method
fn server_stats_snapshot(&self) -> Vec<(String, ServerAttemptStats)> { ... }
}Expand description
Article-dispatch engine: accepts jobs, drives NNTP fetches, emits progress.
Constructed by the facade/queue layer and owned as Arc<dyn DispatchEngine>.
All methods are &self; implementations use interior mutability to allow
concurrent use across tokio tasks.
Required Methods§
Sourcefn start(&self)
fn start(&self)
Spawn workers for all currently enabled servers and start the supervisor task. Idempotent (safe to call more than once).
Sourcefn 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.
Sourcefn 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.
Sourcefn resume_job(&self, job_id: &str)
fn resume_job(&self, job_id: &str)
Resume a paused job.
Sourcefn 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.
Sourcefn 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.
Sourcefn 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).
Sourcefn 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.
Sourcefn 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.
Provided Methods§
Sourcefn 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.