Skip to main content

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}