pub enum UpstreamError {
NoEndpoints,
InvalidRootCertificate(String),
InvalidHost(String),
ConnectTimeout {
after: Duration,
},
ReadTimeout {
after: Duration,
},
Saturated,
Io(Error),
Client(Error),
H3Unavailable,
}Expand description
Error sending a request to an upstream.
Variants§
NoEndpoints
send was called on an upstream with no endpoints. Only reachable
via unvalidated direct construction; config validation rejects
empty endpoint lists.
InvalidRootCertificate(String)
A root certificate supplied to
UpstreamRegistry::with_root_certificates could not be parsed
or was otherwise unusable as a trust anchor.
InvalidHost(String)
The endpoint address is not usable as a TLS server name.
ConnectTimeout
Dialing (TCP or TLS handshake) exceeded the connect timeout.
ReadTimeout
The per-attempt deadline (timeouts.read_ms) expired before the
response headers resolved. Covers pool-queue wait + connect +
request write + header read; see the module docs (DW-014).
Saturated
The per-upstream pending cap (max_pending, DW-015) is full: the
request would have to WAIT for an outbound connection slot and the
config chose immediate rejection over queueing. Classified 503
(“upstream saturated”) by the proxy; NOT retryable (the upstream is
saturated by definition — a retry adds load).
Io(Error)
Transport-level I/O failure while connecting.
Client(Error)
The hyper client failed to complete the request (broken pool connection, framing error, …).
DW-108: the upstream is configured protocol: h3 but the H3
transport is unavailable. When the h3 cargo feature is off the
H3 connector is not compiled, so an h3 upstream is inert and
every dispatch fails closed with this error rather than silently
falling back to a wrong transport. Classified 502 by the proxy;
not health-reportable (a configuration/feature gap, not an
endpoint failure).
Trait Implementations§
Source§impl Debug for UpstreamError
impl Debug for UpstreamError
Source§impl Display for UpstreamError
impl Display for UpstreamError
Source§impl Error for UpstreamError
impl Error for UpstreamError
1.30.0 · 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
Source§impl From<Error> for UpstreamError
impl From<Error> for UpstreamError
Source§impl From<Error> for UpstreamError
impl From<Error> for UpstreamError
Source§impl From<H3Error> for UpstreamError
impl From<H3Error> for UpstreamError
Source§impl From<UpstreamError> for Error
impl From<UpstreamError> for Error
Source§fn from(e: UpstreamError) -> Self
fn from(e: UpstreamError) -> Self
Source§impl From<UpstreamError> for H3Error
impl From<UpstreamError> for H3Error
Source§fn from(e: UpstreamError) -> Self
fn from(e: UpstreamError) -> Self
Auto Trait Implementations§
impl Freeze for UpstreamError
impl !RefUnwindSafe for UpstreamError
impl Send for UpstreamError
impl Sync for UpstreamError
impl Unpin for UpstreamError
impl !UnwindSafe for UpstreamError
Blanket Implementations§
§impl<T> AnyExt for T
impl<T> AnyExt for T
§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind reference§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable reference§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointer§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointer§fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
T behind Box pointer§fn downcast_move<T>(this: Self) -> Option<T>
fn downcast_move<T>(this: Self) -> Option<T>
Self to T,
useful only in generic context as a workaround for specializationSource§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
§impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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