nexus/config/queue.rs
1//! Request queue configuration
2
3use serde::{Deserialize, Serialize};
4
5/// Configuration for request queuing when backends are saturated.
6///
7/// The request queue holds incoming requests when all backends are at capacity,
8/// preventing immediate 503 rejections for burst traffic.
9///
10/// # Example
11///
12/// ```toml
13/// [queue]
14/// enabled = true
15/// max_size = 100
16/// max_wait_seconds = 30
17/// ```
18#[derive(Debug, Clone, Serialize, Deserialize)]
19#[serde(default)]
20pub struct QueueConfig {
21 /// Whether request queuing is enabled.
22 ///
23 /// Default: true
24 /// When false, saturated requests immediately return 503.
25 pub enabled: bool,
26
27 /// Maximum number of queued requests.
28 ///
29 /// Default: 100
30 /// When max_size is 0, queuing is disabled (equivalent to enabled=false).
31 /// When queue is full, new requests immediately return 503.
32 pub max_size: u32,
33
34 /// Maximum wait time for queued requests in seconds.
35 ///
36 /// Default: 30 seconds
37 /// Requests exceeding this timeout return 503 with retry_after header.
38 pub max_wait_seconds: u64,
39}
40
41impl Default for QueueConfig {
42 fn default() -> Self {
43 Self {
44 enabled: true,
45 max_size: 100,
46 max_wait_seconds: 30,
47 }
48 }
49}
50
51impl QueueConfig {
52 /// Check if queuing is effectively enabled.
53 ///
54 /// Queuing is disabled if either enabled=false or max_size=0.
55 pub fn is_enabled(&self) -> bool {
56 self.enabled && self.max_size > 0
57 }
58}