Skip to main content

Undeliverable

Enum Undeliverable 

Source
pub enum Undeliverable {
    WorkerUnreachable {
        reason: String,
    },
    DeliveryFailed {
        reason: String,
    },
    Unservable {
        reason: String,
    },
}
Expand description

Why one delivery attempt did not place its task with a worker.

The two variants are the whole reason this is a type rather than a bool: they carry opposite obligations for the worker’s registration, and conflating them either destroys a live worker’s registration or keeps a dead one’s forever.

Variants§

§

WorkerUnreachable

The transport reports the worker is gone — a closed gRPC stream, a liminal connection the supervisor no longer owns.

The caller deregisters it. This is the pre-existing behaviour of the closed-stream path, now reached for a reason that is true of both transports rather than inferred from a missing sender.

Fields

§reason: String

Operator-facing reason, named by the transport that observed it.

§

DeliveryFailed

The delivery failed while the worker is alive — a liminal reply that did not arrive in time, a full channel, a drain that closed the gate mid-push.

🔴 The caller keeps the registration and withdraws only its own token. Deregistering here would destroy a healthy worker because one delivery was slow, which is exactly the failure the typed outcome exists to prevent.

Fields

§reason: String

Operator-facing reason, named by the transport that observed it.

§

Unservable

The task can NEVER be placed: the transport proved its encoded frame is larger than the connection’s whole outbound buffer, a bound every worker connection shares because one supervisor builds them all from one LimitsConfig. No other candidate can carry it, no retry can, and every attempt writes one more lease for a step that never runs.

The caller keeps the registration, withdraws its own token, and settles the dispatch TERMINALLY — no next candidate, no park, no attempt-neutral re-arm. This is the class the outbox dead-letters on first observation and the engine-seam bridge reports as terminal:; it used to be reported as Undeliverable::DeliveryFailed here, which read as retryable and spent a whole attempt budget on a certainty.

Fields

§reason: String

Operator-facing reason naming the frame’s size, the bound and the key that sets it.

Implementations§

Source§

impl Undeliverable

Source

pub fn is_unservable(&self) -> bool

Whether this refusal is terminal for the dispatch — see Undeliverable::Unservable.

Source

pub fn deregisters_worker(&self) -> bool

Whether the caller should remove this worker from the registry.

true only for Undeliverable::WorkerUnreachable. Expressed as a method so the decision has one definition rather than a match repeated at every call site, where the two arms could drift apart.

Source

pub fn reason(&self) -> &str

The operator-facing reason, whichever variant this is.

Trait Implementations§

Source§

impl Debug for Undeliverable

Source§

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

Formats the value using the given formatter. 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<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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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