Skip to content

Commit a674a4c

Browse files
authored
feat: Configurable rate limiter max burst size (#28)
Signed-off-by: Jagoda Ślązak <[email protected]>
1 parent ac2285d commit a674a4c

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

src/config.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ pub struct Config {
1717
pub postfix_reinject_port_incoming: u16,
1818
#[serde(default = "Config::default_max_message_size")]
1919
pub max_message_size: usize,
20+
#[serde(default = "Config::default_max_user_send_per_minute")]
2021
pub max_user_send_per_minute: NonZeroU32,
22+
#[serde(default = "Config::default_max_user_send_burst_size")]
23+
pub max_user_send_burst_size: NonZeroU32,
2124
#[serde(default, deserialize_with = "deserialize_sequence")]
2225
pub passthrough_senders: Vec<String>,
2326
#[serde(default, deserialize_with = "deserialize_sequence")]
@@ -94,4 +97,10 @@ impl Config {
9497
const fn default_max_message_size() -> usize {
9598
31457280
9699
}
100+
const fn default_max_user_send_per_minute() -> NonZeroU32 {
101+
NonZeroU32::new(60).expect("60 != 0")
102+
}
103+
const fn default_max_user_send_burst_size() -> NonZeroU32 {
104+
NonZeroU32::new(10).expect("10 != 0")
105+
}
97106
}

src/outbound.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ pub struct OutgoingBeforeQueueHandler {
2020

2121
impl OutgoingBeforeQueueHandler {
2222
pub fn new(config: Config) -> Self {
23-
let quota = Quota::per_minute(config.max_user_send_per_minute);
23+
let quota = Quota::per_minute(config.max_user_send_per_minute)
24+
.allow_burst(config.max_user_send_burst_size);
2425
Self {
2526
config: Arc::new(config),
2627
send_rate_limiter: RateLimiter::keyed(quota),

0 commit comments

Comments
 (0)