Skip to main content

DispatchEngine

Trait DispatchEngine 

Source
pub trait DispatchEngine: Send + Sync {
Show 18 methods // 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) -> bool; fn has_job(&self, job_id: &str) -> bool; fn release_completed_job(&self, job_id: &str); fn update_servers(&self, servers: Vec<ServerConfig>); fn connection_snapshot(&self) -> Vec<(String, usize, usize)>; fn active_connection_snapshot(&self) -> Vec<(String, usize, usize)>; fn connection_total(&self) -> usize; 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 methods fn job_active_secs(&self, _job_id: &str) -> Option<f64> { ... } 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§

Source

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>)

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)

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)

Resume a paused job.

Source

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) -> bool

Abort job_id with a human-readable reason. Emits ProgressUpdate::JobAborted once outstanding articles drain. Returns true only for the caller that won terminal ownership.

Source

fn has_job(&self, job_id: &str) -> bool

Is job_id currently known to the dispatcher?

Source

fn release_completed_job(&self, job_id: &str)

Release a terminal job’s dispatcher and assembler resources before post-processing opens the completed files.

Source

fn update_servers(&self, servers: Vec<ServerConfig>)

Replace server configuration and reconcile connection budgets/workers.

Source

fn connection_snapshot(&self) -> Vec<(String, usize, usize)>

Per-server allocated worker slots and configured limits.

Source

fn active_connection_snapshot(&self) -> Vec<(String, usize, usize)>

Per-server connections actively transferring articles and limits.

Source

fn connection_total(&self) -> usize

Total allocated worker slots across current server pools.

Source

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)

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

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,

Gracefully shut down: stop accepting new work, signal all workers, and wait for the supervisor to exit.

Provided Methods§

Source

fn job_active_secs(&self, _job_id: &str) -> Option<f64>

Active download time job_id has accumulated in this dispatcher, excluding pauses, or None when the job is not registered. Lets the queue checkpoint elapsed time so a restart can carry it forward.

Source

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.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§