pub struct RouteInfo {
pub index: usize,
pub strip_prefix: Option<Arc<str>>,
pub has_filters: bool,
pub reads_body: bool,
pub upgrade: Option<Arc<UpgradeConfig>>,
pub compression: Option<Arc<CompressionConfig>>,
/* private fields */
}Expand description
What crate::ConfigSnapshot::find_route hands the fast-path server: which route matched
(index, used to dispatch its chain) plus the data needed to forward — the weighted backends
(the server picks a group, then a healthy instance from it) and the optional prefix strip. Owned
/ Arc-shared so it survives a move into spawn_blocking.
Fields§
§index: usize§strip_prefix: Option<Arc<str>>Arc<str> so building this per-request RouteInfo from the compiled route (find_route,
called on every request) is an atomic refcount bump, not a heap allocation.
has_filters: boolWhether this route has any filters (drives the header-side chain dispatch).
reads_body: boolWhether any filter on this route reads the request body (exports on-request-body, ADR
000038). The fast path buffers the body ONLY when this is true; a route of header-only
filters keeps the zero-copy streaming path (the real fix for the body-tax, docs/servey).
upgrade: Option<Arc<UpgradeConfig>>This route’s Upgrade opt-in (ADR 000048), or None for deny-by-default. The fast path
tunnels only when the client’s token is allowlisted here.
compression: Option<Arc<CompressionConfig>>This route’s compression opt-in (ADR 000074), or None for never-transform. The fast path
negotiates and compresses AFTER the response chain, on the streamed body filters never see.
Implementations§
Source§impl RouteInfo
impl RouteInfo
Sourcepub fn pick_upstream(&self) -> Option<Arc<UpstreamGroup>>
pub fn pick_upstream(&self) -> Option<Arc<UpstreamGroup>>
Pick the upstream group to forward this request to from the route’s weighted traffic split
(ADR 000034): the next backend in the split order that has an eligible instance (renormalize
over healthy), or None when no backend is eligible (the fast path then fails closed 503,
the same no-healthy fault as a single upstream). Lock-free.
Sourcepub fn rewrite_path<'a>(&self, path: &'a str) -> Cow<'a, str>
pub fn rewrite_path<'a>(&self, path: &'a str) -> Cow<'a, str>
Apply this route’s host-native prefix strip to the path the fast-path server forwards to the upstream. The chain already ran against the original path; this only affects what the upstream sees. No rule (or a non-matching path) leaves the path unchanged — borrowed, so the common no-strip case allocates nothing.
Sourcepub fn check_rate_limit(&self, peer: IpAddr) -> RateLimitDecision
pub fn check_rate_limit(&self, peer: IpAddr) -> RateLimitDecision
Consult this route’s native rate limiter (ADR 000033) for one request, keyed on the
connection peer. Allow when the route has no limiter or a token was available;
Limit { retry_after_ms } when the bucket is empty (the fast path fails closed with 429).
Called BEFORE the filter chain so a flood is shed without spending WASM CPU.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for RouteInfo
impl !UnwindSafe for RouteInfo
impl Freeze for RouteInfo
impl Send for RouteInfo
impl Sync for RouteInfo
impl Unpin for RouteInfo
impl UnsafeUnpin for RouteInfo
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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