pub struct StreamRetryConfig {
pub max_retries: u32,
pub base_delay_ms: u64,
pub max_delay_ms: u64,
pub jitter_factor: f64,
}Expand description
Configuration for retry behaviour when stream initialization fails.
Uses exponential backoff with jitter to avoid thundering herd when multiple agents retry simultaneously.
§Backoff Formula
delay = min(base_delay * 2^attempt, max_delay) * (1.0 ± jitter)§Example
use loopctl::stream::handler::StreamRetryConfig;
let config = StreamRetryConfig {
max_retries: 5,
base_delay_ms: 200,
..Default::default()
};
assert_eq!(config.max_delay_ms, 10_000);Fields§
§max_retries: u32Maximum number of retry attempts for stream initialization.
Each attempt opens a new stream and waits for the first event
with the initial_event_timeout.
base_delay_ms: u64Base delay in milliseconds before the first retry.
Doubled on each subsequent retry attempt.
max_delay_ms: u64Maximum delay in milliseconds between retries.
Caps the exponential growth so retries don’t take too long.
jitter_factor: f64Jitter factor (0.0 to 1.0) applied to the delay.
Prevents thundering herd when multiple agents retry simultaneously. A factor of 0.1 means the delay varies by ±10%.
Implementations§
Source§impl StreamRetryConfig
impl StreamRetryConfig
Sourcepub fn base_delay(&self, attempt: u32) -> Duration
pub fn base_delay(&self, attempt: u32) -> Duration
Calculate the backoff delay for a given attempt number (0-indexed).
Returns the delay as a Duration, capped at
max_delay_ms. Does not apply jitter —
callers should add jitter based on jitter_factor.
§Example
use loopctl::stream::handler::StreamRetryConfig;
use std::time::Duration;
let config = StreamRetryConfig::default();
assert_eq!(config.base_delay(0), Duration::from_millis(100));
assert_eq!(config.base_delay(1), Duration::from_millis(200));
assert_eq!(config.base_delay(2), Duration::from_millis(400));Sourcepub fn validate(&self) -> Result<(), String>
pub fn validate(&self) -> Result<(), String>
Validates the configuration, returning an error message if invalid.
Checks that jitter_factor is finite and within 0.0..=1.0,
and that all delay values are non-zero with max_delay_ms ≥ base_delay_ms.
§Errors
Returns a string describing the first validation failure.
§Example
use loopctl::stream::handler::StreamRetryConfig;
assert!(StreamRetryConfig::default().validate().is_ok());
let bad = StreamRetryConfig { jitter_factor: 1.5, ..Default::default() };
assert!(bad.validate().is_err());Trait Implementations§
Source§impl Clone for StreamRetryConfig
impl Clone for StreamRetryConfig
Source§fn clone(&self) -> StreamRetryConfig
fn clone(&self) -> StreamRetryConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more