Skip to main content

JobQueue

Struct JobQueue 

Source
pub struct JobQueue<K: JobKind> { /* private fields */ }
Expand description

The queue: one worker, one job at a time, FIFO, deduplicated by subject.

Implementations§

Source§

impl<K: JobKind> JobQueue<K>

Source

pub fn new(kind: K) -> Self

A queue over kind. No lane is started until something is enqueued.

Source

pub fn next_job_id(&self) -> String

The job id the next enqueue would use, without enqueuing.

For a kind that has to name the job before it exists. A purge takes the account’s lockout before enqueuing — that is what makes the lockout a fact by the time Accounts.Purge returns — and the lockout’s holder has to be the job id, or the release could not tell this job’s lockout from anybody else’s.

Minted from the same counter JobQueue::enqueue uses, so an id handed out here and never used simply leaves a gap. A gap in a job-id sequence costs nothing; two jobs sharing an id would make the release ambiguous.

Source

pub fn enqueue(&self, order: K::Order) -> Job<K>

Ask for the order’s subject to be worked on, and return without working on it.

Returns the job now responsible for the subject: a new one, or the one already queued or running. Never enqueues a second job for a subject that has one live.

Source

pub fn enqueue_as(&self, order: K::Order, job_id: String) -> Job<K>

JobQueue::enqueue under an id taken from JobQueue::next_job_id earlier.

The caller must not assume this id is the one that ends up responsible: if a job for the same subject is already live, that one is returned and this order’s id is never used. Accounts.Purge handles exactly that by reading the gate back out of the table rather than trusting the one it wrote.

Source

pub fn status(&self, key: &str) -> Option<Job<K>>

The job the queue is holding for key, if it still has one.

Source

pub fn peak_in_flight(&self) -> usize

The highest number of jobs of this kind that have ever been running together.

Must be 1 after any amount of traffic — that is the invariant this module exists for, and this is how a test sees it rather than infers it. 0 before anything has run.

Source

pub fn runs(&self) -> u64

How many times the kind’s run has been called — i.e. how much work actually happened. The applied output the dedup gate asserts on.

Source

pub fn stop(&self)

Run nothing more after the job in flight, and refuse new jobs by name. For tests and the box’s stop; the lane’s worker ends when the last handle of the queue goes.

Source

pub fn jera_stats(&self) -> Option<ChainStats>

The queue’s jera lane, counted: its done and failed jobs (A32-14). None before the first job, when no lane has started.

Trait Implementations§

Source§

impl<K: JobKind> Clone for JobQueue<K>

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§

§

impl<K> Freeze for JobQueue<K>
where Arc<Inner<K>>: Freeze,

§

impl<K> RefUnwindSafe for JobQueue<K>
where Arc<Inner<K>>: RefUnwindSafe,

§

impl<K> Send for JobQueue<K>
where Arc<Inner<K>>: Send,

§

impl<K> Sync for JobQueue<K>
where Arc<Inner<K>>: Sync,

§

impl<K> Unpin for JobQueue<K>
where Arc<Inner<K>>: Unpin,

§

impl<K> UnsafeUnpin for JobQueue<K>
where Arc<Inner<K>>: UnsafeUnpin,

§

impl<K> UnwindSafe for JobQueue<K>
where Arc<Inner<K>>: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more