Skip to main content

camel_master/
config.rs

1use camel_api::CamelError;
2
3#[derive(Debug, Clone)]
4pub struct MasterUriConfig {
5    pub lock_name: String,
6    pub delegate_uri: String,
7}
8
9impl MasterUriConfig {
10    pub fn parse(uri: &str) -> Result<Self, CamelError> {
11        let mut parts = uri.splitn(3, ':');
12        let scheme = parts.next().unwrap_or_default();
13        let lock_name = parts.next().unwrap_or_default();
14        let delegate_uri = parts.next().unwrap_or_default();
15        if scheme != "master" || lock_name.is_empty() || delegate_uri.is_empty() {
16            return Err(CamelError::InvalidUri(format!(
17                "{uri}: expected master:<lockname>:<delegate-uri>"
18            )));
19        }
20        Ok(Self {
21            lock_name: lock_name.to_string(),
22            delegate_uri: delegate_uri.to_string(),
23        })
24    }
25}
26
27/// Configuration for the master/leader-election component.
28///
29/// Controls drain timeout for graceful delegate shutdown and the maximum number
30/// of delegate start retry attempts while leading.
31#[derive(Debug, Clone)]
32pub struct MasterComponentConfig {
33    /// Timeout in milliseconds for draining a delegate consumer on leadership loss.
34    pub drain_timeout_ms: u64,
35    /// Maximum number of times to retry starting the delegate consumer after a failure.
36    /// `None` means unlimited retries.
37    pub delegate_retry_max_attempts: Option<u32>,
38}
39
40impl MasterComponentConfig {
41    /// Create a new config with the given drain timeout and retry limit.
42    pub fn new(drain_timeout_ms: u64, delegate_retry_max_attempts: Option<u32>) -> Self {
43        Self {
44            drain_timeout_ms,
45            delegate_retry_max_attempts,
46        }
47    }
48}
49
50impl Default for MasterComponentConfig {
51    fn default() -> Self {
52        Self {
53            drain_timeout_ms: 5000,
54            delegate_retry_max_attempts: Some(30),
55        }
56    }
57}