Skip to main content

QueueServiceReason

Enum QueueServiceReason 

Source
pub enum QueueServiceReason {
    NoQueueDeclaration,
    NoLivePollers,
    PollersIncompatible,
    Saturated,
    PollersUnreachable,
    PollersAtCapacity,
    PollersCapacityUnannounced,
}
Expand description

Why a (namespace, task_queue, activity_type) address is not being served.

The names are R1’s, verbatim, and are the strings that reach logs, dispatch failures, and the queue-service accessor.

Variants§

§

NoQueueDeclaration

No deployed .v4 contract declares this task queue at all. Structural: no worker can ever legitimately arrive for it, so it refuses unconditionally under every policy.

§

NoLivePollers

The queue is declared (or its declaration is unknowable) and no worker is connected for the pool at all.

§

PollersIncompatible

Workers are connected for the pool but none of them covers this activity type, or none of them sits on the dispatch’s pinned node.

§

Saturated

A compatible worker is connected and its intake is refusing work: the task could not be handed over before the schedule-to-start clock expired.

§

PollersUnreachable

Workers are connected and DO serve this activity on this node, but the liveness verdict has withdrawn dispatch eligibility from all of them after losing reachability.

🔴 Distinct from Self::PollersIncompatible because the remedies are close to opposite. Incompatible pollers need a worker deployed that covers the activity; these workers already cover it, and deploying another changes nothing — the fault is on the wire to the ones already there. Distinct from an opening probation, which is not reported at all because it clears itself within seconds.

§

PollersAtCapacity

Workers are connected, DO serve this activity on this node, and every one of them is already running every activity it advertised it would run at once. The work is queued and starts as capacity frees.

🔴 The one reason in this taxonomy that describes a HEALTHY fleet, which is why it could not be folded into any of the others. Every existing sentence here would be a lie about a busy pool: nothing is missing, no wire has failed, no deployment is absent. Its remedy is the exact opposite of Self::PollersUnreachable’s — starting another worker helps here and does not help there — and two opposite pieces of advice cannot share one name. (Self::NoLivePollers shares the remedy but not the diagnosis: there the pool is empty, here it is full and working.)

§

PollersCapacityUnannounced

Workers are connected and DO serve this activity on this node, at least one of them has not announced how much work it can take, and no worker whose capacity IS known has a free slot — so the server has nothing it can honestly select against.

Reported on > 0 rather than on the whole population, and it OUTRANKS Self::PollersAtCapacity in super::census::classify. Both conditions can hold of one pool at once, only one reason can be published, and this is the one that may need an operator: a busy pool clears itself as work completes, a mute worker does not.

🔴 NOT a quieter Self::PollersAtCapacity, and the distinction is the whole reason this variant exists. Selection excludes an unannounced worker by treating unknown capacity as full — the safe direction, since the alternative is inventing a number for a process that is about to state its own — but reporting that exclusion as “at capacity” would tell an operator their fleet was busy when it is idle and mute. The advice attached to a busy pool (“start another worker, or raise concurrency”) is actively wrong here: another worker of the same build will be just as silent.

Ordinarily invisible. It is true for exactly one round trip after a liminal worker registers, and a dispatch has to miss inside that window to see it. Persisting past that is the signal: the worker is an older build that does not announce, or its announcement was lost.

Implementations§

Source§

impl QueueServiceReason

Source

pub const ALL: [Self; 7]

Every variant, and the single source of that set.

🔴 Self::parse and the round-trip test both read THIS, so a variant missing here is a variant that cannot be parsed back from its own spelling — a wire value the server writes and then fails to read. The exhaustive match in Self::as_str forces a new variant to be given a spelling, but nothing forces it into this list; all_lists_every_variant is what does, by matching exhaustively so the compiler refuses a variant this list has not been told about.

Source

pub const fn as_str(self) -> &'static str

The canonical wire/log spelling.

Source

pub const fn is_structural(self) -> bool

Whether the unservability is structural — provable from the deployed contract records alone, unchangeable by waiting or retrying.

Source

pub fn explain(self, address: &ServiceAddress) -> String

The operator-facing sentence for this reason at address: what has to be fixed, in words.

This is the single source of that sentence. The dispatch refusal’s human tail (WorkerUnavailable::explain) and the describe projection’s detail both read it here, so a queue that is unserved cannot be explained one way in a refusal and another way in a read.

Source

pub fn parse(text: &str) -> Option<Self>

Read a reason back from its canonical spelling.

Trait Implementations§

Source§

impl Clone for QueueServiceReason

Source§

fn clone(&self) -> QueueServiceReason

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

impl Copy for QueueServiceReason

Source§

impl Debug for QueueServiceReason

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for QueueServiceReason

Source§

fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for QueueServiceReason

Source§

impl Hash for QueueServiceReason

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for QueueServiceReason

Source§

fn cmp(&self, other: &QueueServiceReason) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

fn clamp_to<R>(self, range: R) -> Self
where Self: Sized, R: ClampBounds<Self>,

🔬This is a nightly-only experimental API. (clamp_to)
Restrict a value to a certain range. Read more
Source§

impl PartialEq for QueueServiceReason

Source§

fn eq(&self, other: &QueueServiceReason) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl PartialOrd for QueueServiceReason

Source§

fn partial_cmp(&self, other: &QueueServiceReason) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl StructuralPartialEq for QueueServiceReason

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> AsOut<T> for T
where T: Copy,

Source§

fn as_out(&mut self) -> Out<'_, T>

Returns an out reference to self.
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<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
Source§

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

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. 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> IntoMaybeUndefined<T> for T

Source§

fn into_maybe_undefined(self) -> MaybeUndefined<T>

Converts this value into a three-state builder argument.
Source§

impl<T> IntoOption<T> for T

Source§

fn into_option(self) -> Option<T>

Converts this value into an optional builder argument.
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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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