v0.2.11-pre.004
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-offchain-transport-lib/src/http_admission.rs
|
||||
// version: 2
|
||||
// version: 3
|
||||
|
||||
//! Provider-neutral local request admission and rate-limit cooldown primitives.
|
||||
|
||||
@@ -16,8 +16,6 @@ pub(crate) enum HttpAdmissionPolicy {
|
||||
Dynamic,
|
||||
/// Enforce a smooth token bucket for a documented request budget and window.
|
||||
Fixed { requests: u32, window: std::time::Duration, burst: u32 },
|
||||
/// No local cadence limit is configured; provider-driven cooldown still applies.
|
||||
Unlimited,
|
||||
}
|
||||
|
||||
impl crate::HttpAdmissionPolicy {
|
||||
@@ -49,7 +47,6 @@ pub(crate) enum HttpAdmissionDecision {
|
||||
pub(crate) struct HttpAdmissionController {
|
||||
cooldown_until: std::sync::Mutex<std::option::Option<std::time::Instant>>,
|
||||
fallback_cooldown: std::time::Duration,
|
||||
policy: crate::HttpAdmissionPolicy,
|
||||
token_bucket: std::sync::Mutex<std::option::Option<HttpTokenBucketState>>,
|
||||
}
|
||||
|
||||
@@ -70,22 +67,15 @@ impl crate::HttpAdmissionController {
|
||||
crate::HttpAdmissionPolicy::Fixed { requests, window, burst } => {
|
||||
std::option::Option::Some(HttpTokenBucketState::new(requests, window, burst, std::time::Instant::now()))
|
||||
},
|
||||
crate::HttpAdmissionPolicy::Dynamic | crate::HttpAdmissionPolicy::Unlimited => std::option::Option::None,
|
||||
crate::HttpAdmissionPolicy::Dynamic => std::option::Option::None,
|
||||
};
|
||||
return std::result::Result::Ok(Self {
|
||||
cooldown_until: std::sync::Mutex::new(std::option::Option::None),
|
||||
fallback_cooldown,
|
||||
policy,
|
||||
token_bucket: std::sync::Mutex::new(token_bucket),
|
||||
});
|
||||
}
|
||||
|
||||
/// Returns the configured local policy.
|
||||
#[must_use]
|
||||
pub(crate) const fn policy(&self) -> crate::HttpAdmissionPolicy {
|
||||
return self.policy;
|
||||
}
|
||||
|
||||
/// Tries to admit one request immediately without sleeping.
|
||||
pub(crate) fn try_admit(&self) -> crate::HttpAdmissionDecision {
|
||||
return self.try_admit_at(std::time::Instant::now());
|
||||
@@ -108,7 +98,8 @@ impl crate::HttpAdmissionController {
|
||||
return effective;
|
||||
}
|
||||
|
||||
/// Returns the remaining provider cooldown, if any.
|
||||
/// Returns the remaining provider cooldown for deterministic limiter tests.
|
||||
#[cfg(test)]
|
||||
pub(crate) fn cooldown_remaining(&self) -> std::option::Option<std::time::Duration> {
|
||||
return self.cooldown_remaining_at(std::time::Instant::now());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user