Skip to main content

krabka_throttle/runtime/
state.rs

1//! [`ThrottleState`], the broker-wide bundle of [`TokenBucket`]s that meters
2//! replica traffic and intra-broker log directory moves.
3//!
4//! It is its own module because it is a container of buckets rather than part
5//! of the bucket itself.
6
7use {super::TokenBucket, std::sync::Arc};
8
9/// Broker-wide throttle state for replica traffic and intra-broker log moves.
10#[derive(Debug)]
11pub struct ThrottleState {
12    pub leader_out: Arc<TokenBucket>,
13    pub follower_in: Arc<TokenBucket>,
14    pub alter_log_dirs: Arc<TokenBucket>,
15}
16
17impl ThrottleState {
18    #[must_use]
19    pub fn new() -> Self {
20        Self {
21            leader_out: Arc::new(TokenBucket::new()),
22            follower_in: Arc::new(TokenBucket::new()),
23            alter_log_dirs: Arc::new(TokenBucket::new()),
24        }
25    }
26}
27
28impl Default for ThrottleState {
29    fn default() -> Self { Self::new() }
30}