pub struct RedisQuotaConfig {
pub url: String,
pub fail_open: bool,
pub key_prefix: String,
pub connection_timeout_ms: u64,
pub ha: RedisHaConfig,
}Expand description
Distributed Redis-backed consumer request quotas config (DW-155,
gateway.redis_quotas).
When present and the ent cargo feature is compiled in AND a valid
license with the redis_quotas feature claim is loaded, the gateway
uses a Redis-backed quota checker instead of the local SQLite-backed
one — so two or more gateway instances share one quota counter per
(consumer, budget, window). The same daily/monthly budget semantics
run, but the counters live in Redis and are updated atomically via a
Lua script in a single round-trip. When the ent feature is NOT
compiled in, or the license lacks the claim, the block is accepted
but inert (the local SQLite checker is used). When Redis is
unreachable, fail_open (default true) lets requests through; set
it to false to reject with 429 instead.
Fields§
§url: StringRedis connection URL (e.g. redis://127.0.0.1:6379 or
redis-cluster://...). The connection is established once at
startup and pooled via a multiplexed ConnectionManager.
May be the same Redis instance as the rate limiter
(redis_rate_limiter.url) — the key prefixes are distinct.
fail_open: boolFail-open behavior when Redis is unreachable (default true):
true allows the request (no quota enforcement); false
rejects with 429. Fail-open is the safer default for
availability — a Redis outage should not take down the gateway
— but operators who need hard quotas can set this to false.
key_prefix: StringPrefix for quota keys in Redis (default dwara:quota:). Each
(consumer, budget, window) counter is stored as
{prefix}{consumer_id}:{budget}:{window_start}.
connection_timeout_ms: u64Connection timeout in milliseconds (default 1000; validated to 100..=30 000). The timeout applies to the initial connection establishment at startup, not to per-request Lua script calls.
ha: RedisHaConfigHA and topology config (SCALE-11, #248). Same shape as
redis_rate_limiter.ha.
Trait Implementations§
Source§impl Clone for RedisQuotaConfig
impl Clone for RedisQuotaConfig
Source§fn clone(&self) -> RedisQuotaConfig
fn clone(&self) -> RedisQuotaConfig
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RedisQuotaConfig
impl Debug for RedisQuotaConfig
Source§impl<'de> Deserialize<'de> for RedisQuotaConfig
impl<'de> Deserialize<'de> for RedisQuotaConfig
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 RedisQuotaConfig
impl JsonSchema for RedisQuotaConfig
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 RedisQuotaConfig
impl PartialEq for RedisQuotaConfig
Source§impl Serialize for RedisQuotaConfig
impl Serialize for RedisQuotaConfig
impl StructuralPartialEq for RedisQuotaConfig
Auto Trait Implementations§
impl Freeze for RedisQuotaConfig
impl RefUnwindSafe for RedisQuotaConfig
impl Send for RedisQuotaConfig
impl Sync for RedisQuotaConfig
impl Unpin for RedisQuotaConfig
impl UnwindSafe for RedisQuotaConfig
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