Skip to main content

Worker

Struct Worker 

Source
pub struct Worker { /* private fields */ }
Expand description

One worker. Cloning is cheap and gives a second worker on the same queue.

Implementations§

Source§

impl Worker

Source

pub fn new(queue: Arc<dyn Queue>, registry: Arc<JobRegistry>) -> Self

Source

pub fn reporting_to(self, store: Arc<dyn ProgressStore>) -> Self

Give jobs somewhere to report progress. The web process reads the same store, so it must be one both can reach — the database one, unless the worker runs inside the web process.

Source

pub fn on_queue(self, queue: impl Into<String>) -> Self

Source

pub fn poll_interval(self, interval: Duration) -> Self

Source

pub fn max_jobs(self, count: u64) -> Self

Stop after count attempts, whatever the shutdown signal says.

Source

pub fn backoff_cap(self, cap: Duration) -> Self

Source

pub fn options(&self) -> &WorkerOptions

Source

pub async fn run(&self, shutdown: Shutdown) -> Result<WorkerStats>

Work until shutdown is signalled or max_jobs is reached.

The shutdown check is at the top of the loop and nowhere else. That is the entire graceful-shutdown guarantee: a job already reserved is always run to completion, because there is no point at which the loop can abandon one.

An error from the queue is not an error from the worker. This is a long-running process and keeping going is the only thing it is for, so a failure to reach the queue — a deadlock, a dropped connection, a failover — is logged and retried with a growing pause, and the loop carries on. It used to propagate straight out: one deadlock on one poll ended the worker, and run_pool joining its tasks with ? ended the whole queue:work process, mid-queue, with jobs still waiting.

The pause starts at the poll interval, doubles, and is capped at MAX_QUEUE_ERROR_BACKOFF; it resets the first time the queue answers. It is cut short by shutdown, like every other wait here.

The Result stays in the signature so callers do not change, but this no longer returns Err for anything the queue did.

Source

pub async fn run_once(&self) -> Result<Option<Outcome>>

Reserve and run at most one job. None when the queue had nothing ready.

Source

pub async fn process(&self, reserved: ReservedJob) -> Result<Outcome>

Run one reserved job and settle its fate.

Trait Implementations§

Source§

impl Clone for Worker

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.