#[non_exhaustive]pub enum PostgresOutboxError {
NotMigrated {
source: Error,
},
Database {
source: Error,
},
}Expand description
A failure of a crate::PostgresOutboxStore OutboxStore/OutboxDeadLetters call —
never a property of one row’s content. Row-content problems surface as
reliar_outbox::PoisonedRows instead (ADR 0008).
Classify tells a dispatcher whether a failed call is worth retrying. The bare
PostgresOutboxStore below leans on its default type parameter, gated on the default
json feature; without it this block still shows the shape but is not compiled.
use reliar_core::Classify;
use reliar_outbox::{AcquireRequest, OutboxStore, WorkerId};
let request = AcquireRequest::new(WorkerId::generate());
if let Err(err) = store.acquire(request).await {
eprintln!("acquire failed ({:?}): {err}", err.kind());
}Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
NotMigrated
The relation does not resolve on this connection’s search_path (SQLSTATE 42P01).
Either migrate() has not run, or the connection’s search_path does not resolve the
unqualified name outbox to the migrated schema. Permanent — the table does not
appear on its own. Reliar does not check this at construction (ADR 0047); this is the
first statement reporting it, with PostgreSQL’s own message attached as the source.
Mapped from SQLSTATE 42P01 on every call.
Fields
source: ErrorThe underlying 42P01 error, returned from std::error::Error::source.
Database
Connection lost, statement timeout, pool exhausted, deadlock, or any other sqlx
failure not mapped to a more specific variant above. Classified by the wrapped
SQLSTATE’s class (never blanket-transient — see the Classify impl below).
Trait Implementations§
Source§impl Classify for PostgresOutboxError
Per-variant classification table — no blanket “everything else is
transient”. A wrong verdict is not cosmetic: Transient burns the dispatcher’s retry
budget on a failure that can never succeed; Permanent kills a message that would have gone
through on the next attempt.
impl Classify for PostgresOutboxError
Per-variant classification table — no blanket “everything else is
transient”. A wrong verdict is not cosmetic: Transient burns the dispatcher’s retry
budget on a failure that can never succeed; Permanent kills a message that would have gone
through on the next attempt.
Source§fn kind(&self) -> FailureKind
fn kind(&self) -> FailureKind
Source§impl Debug for PostgresOutboxError
impl Debug for PostgresOutboxError
Source§impl Display for PostgresOutboxError
impl Display for PostgresOutboxError
Source§impl Error for PostgresOutboxError
impl Error for PostgresOutboxError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
Auto Trait Implementations§
impl !RefUnwindSafe for PostgresOutboxError
impl !UnwindSafe for PostgresOutboxError
impl Freeze for PostgresOutboxError
impl Send for PostgresOutboxError
impl Sync for PostgresOutboxError
impl Unpin for PostgresOutboxError
impl UnsafeUnpin for PostgresOutboxError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more