use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct RedisConfig {
pub url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub password: Option<String>,
#[serde(default)]
pub database: u8,
#[serde(default = "default_key_prefix")]
pub key_prefix: String,
#[serde(default)]
pub pool: RedisPoolConfig,
#[serde(default)]
pub checkpoint_retention: CheckpointRetentionConfig,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CheckpointRetentionConfig {
#[serde(default = "default_max_checkpoints_per_task")]
pub max_checkpoints_per_task: usize,
#[serde(default = "default_cleanup_on_memory_pressure")]
pub cleanup_on_memory_pressure: bool,
#[serde(default = "default_memory_pressure_threshold")]
pub memory_pressure_threshold: f64,
}
impl Default for CheckpointRetentionConfig {
fn default() -> Self {
Self {
max_checkpoints_per_task: default_max_checkpoints_per_task(),
cleanup_on_memory_pressure: default_cleanup_on_memory_pressure(),
memory_pressure_threshold: default_memory_pressure_threshold(),
}
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct RedisPoolConfig {
#[serde(default = "default_redis_pool_size")]
pub max_size: u32,
#[serde(default = "default_redis_min_idle")]
pub min_idle: u32,
#[serde(default = "default_redis_timeout")]
pub connection_timeout: u64,
}
impl Default for RedisPoolConfig {
fn default() -> Self {
Self {
max_size: default_redis_pool_size(),
min_idle: default_redis_min_idle(),
connection_timeout: default_redis_timeout(),
}
}
}
fn default_key_prefix() -> String {
"meilibridge".to_string()
}
fn default_redis_pool_size() -> u32 {
10
}
fn default_redis_min_idle() -> u32 {
1
}
fn default_redis_timeout() -> u64 {
5
}
fn default_max_checkpoints_per_task() -> usize {
10
}
fn default_cleanup_on_memory_pressure() -> bool {
true
}
fn default_memory_pressure_threshold() -> f64 {
80.0
}