pub struct AdmissionController { /* private fields */ }Expand description
Thread-safe admission controller backed by per-tenant token buckets.
use oxirs_core::sla::{SlaClass, AdmissionController};
let ctrl = AdmissionController::new();
ctrl.register_tenant("premium_user", SlaClass::Platinum);
assert!(ctrl.try_admit("premium_user").is_ok());Implementations§
Source§impl AdmissionController
impl AdmissionController
Sourcepub fn new() -> AdmissionController
pub fn new() -> AdmissionController
Create an empty controller (no tenants registered).
Sourcepub fn register_tenant(&self, tenant_id: &str, sla: SlaClass)
pub fn register_tenant(&self, tenant_id: &str, sla: SlaClass)
Register (or re-register) a tenant with the given SLA class.
Re-registering an existing tenant resets its bucket to full capacity.
Sourcepub fn try_admit(&self, tenant_id: &str) -> Result<(), AdmissionError>
pub fn try_admit(&self, tenant_id: &str) -> Result<(), AdmissionError>
Try to admit one query unit (cost = 1.0 token) for tenant_id.
Returns Ok(()) when admitted, Err(AdmissionError) otherwise.
Sourcepub fn try_admit_with_cost(
&self,
tenant_id: &str,
cost: f64,
) -> Result<(), AdmissionError>
pub fn try_admit_with_cost( &self, tenant_id: &str, cost: f64, ) -> Result<(), AdmissionError>
Try to admit a request with a custom token cost.
Sourcepub fn sla_class(&self, tenant_id: &str) -> Option<SlaClass>
pub fn sla_class(&self, tenant_id: &str) -> Option<SlaClass>
Return the SLA class for a registered tenant, if any.
Sourcepub fn available_tokens(&self, tenant_id: &str) -> Option<f64>
pub fn available_tokens(&self, tenant_id: &str) -> Option<f64>
Return the current available token count for tenant_id.
Returns None when the tenant is not registered.
Sourcepub fn tenant_count(&self) -> usize
pub fn tenant_count(&self) -> usize
Return the number of registered tenants.
Sourcepub fn deregister_tenant(&self, tenant_id: &str) -> bool
pub fn deregister_tenant(&self, tenant_id: &str) -> bool
Deregister a tenant. Returns true if the tenant existed.
Trait Implementations§
Source§impl Clone for AdmissionController
impl Clone for AdmissionController
Source§fn clone(&self) -> AdmissionController
fn clone(&self) -> AdmissionController
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Default for AdmissionController
impl Default for AdmissionController
Source§fn default() -> AdmissionController
fn default() -> AdmissionController
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl Freeze for AdmissionController
impl RefUnwindSafe for AdmissionController
impl Send for AdmissionController
impl Sync for AdmissionController
impl Unpin for AdmissionController
impl UnsafeUnpin for AdmissionController
impl UnwindSafe for AdmissionController
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
Converts
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>
Converts
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
Read this value from the supplied reader. Same as
ReadEndian::read_from_little_endian().Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.