pub struct UpstreamLocality {
pub mode: LocalityMode,
pub enforce_data_residency: bool,
pub allowed_regions: Vec<String>,
pub denied_regions: Vec<String>,
}Expand description
DW-094 (Ent): locality-aware routing and data residency configuration
for an upstream. Controls how the balancer uses endpoint region/
zone fields to filter or prefer endpoints.
Fields§
§mode: LocalityModeThe routing mode (DW-094):
prefer: prefer endpoints in the edge’s region; fall back to other regions if none are available (healthy).strict: only route to endpoints in the edge’s region; fail with 503 if none are available (no cross-region fallback).failover: prefer the edge’s region, fall back to other regions only when all local endpoints are ejected (likepreferbut with a stricter local-first policy — local endpoints are always tried first even if unhealthy).
enforce_data_residency: boolData residency enforcement: when true, the balancer drops
endpoints whose region is not in allowed_regions BEFORE
applying the locality mode. This is a hard constraint —
endpoints outside the allowed set are never used, even as a
fallback. Use this to comply with data sovereignty requirements
(e.g. EU traffic must stay in EU regions).
allowed_regions: Vec<String>The allowed regions when enforce_data_residency is true. An
endpoint with no region field is always allowed (locality-
agnostic). An endpoint with a region not in this list is
dropped. Must be non-empty when enforce_data_residency is true.
denied_regions: Vec<String>The denied regions (optional). An endpoint with a region in
this list is always dropped, regardless of other settings. Use
this to exclude specific regions without enumerating all
allowed ones.
Trait Implementations§
Source§impl Clone for UpstreamLocality
impl Clone for UpstreamLocality
Source§fn clone(&self) -> UpstreamLocality
fn clone(&self) -> UpstreamLocality
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for UpstreamLocality
impl Debug for UpstreamLocality
Source§impl<'de> Deserialize<'de> for UpstreamLocality
impl<'de> Deserialize<'de> for UpstreamLocality
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for UpstreamLocality
impl JsonSchema for UpstreamLocality
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreSource§impl PartialEq for UpstreamLocality
impl PartialEq for UpstreamLocality
Source§impl Serialize for UpstreamLocality
impl Serialize for UpstreamLocality
impl StructuralPartialEq for UpstreamLocality
Auto Trait Implementations§
impl Freeze for UpstreamLocality
impl RefUnwindSafe for UpstreamLocality
impl Send for UpstreamLocality
impl Sync for UpstreamLocality
impl Unpin for UpstreamLocality
impl UnwindSafe for UpstreamLocality
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§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