forked from Deuxfleurs/garage
Remove token_bucket.rs
This commit is contained in:
parent
4eb8ca3a52
commit
13c5549886
2 changed files with 0 additions and 41 deletions
|
@ -15,6 +15,5 @@ pub mod metrics;
|
||||||
pub mod migrate;
|
pub mod migrate;
|
||||||
pub mod persister;
|
pub mod persister;
|
||||||
pub mod time;
|
pub mod time;
|
||||||
pub mod token_bucket;
|
|
||||||
pub mod tranquilizer;
|
pub mod tranquilizer;
|
||||||
pub mod version;
|
pub mod version;
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
use std::time::{Duration, Instant};
|
|
||||||
|
|
||||||
use tokio::time::sleep;
|
|
||||||
|
|
||||||
pub struct TokenBucket {
|
|
||||||
// Replenish rate: number of tokens per second
|
|
||||||
replenish_rate: u64,
|
|
||||||
// Current number of tokens
|
|
||||||
tokens: u64,
|
|
||||||
// Last replenish time
|
|
||||||
last_replenish: Instant,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl TokenBucket {
|
|
||||||
pub fn new(replenish_rate: u64) -> Self {
|
|
||||||
Self {
|
|
||||||
replenish_rate,
|
|
||||||
tokens: 0,
|
|
||||||
last_replenish: Instant::now(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn take(&mut self, tokens: u64) {
|
|
||||||
while self.tokens < tokens {
|
|
||||||
let needed = tokens - self.tokens;
|
|
||||||
let delay = (needed as f64) / (self.replenish_rate as f64);
|
|
||||||
sleep(Duration::from_secs_f64(delay)).await;
|
|
||||||
self.replenish();
|
|
||||||
}
|
|
||||||
self.tokens -= tokens;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn replenish(&mut self) {
|
|
||||||
let now = Instant::now();
|
|
||||||
let new_tokens =
|
|
||||||
((now - self.last_replenish).as_secs_f64() * (self.replenish_rate as f64)) as u64;
|
|
||||||
self.tokens += new_tokens;
|
|
||||||
self.last_replenish = now;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue