1use serde::Deserialize;
24
25#[derive(Debug, Clone, Deserialize)]
30pub struct SyncEngineConfig {
31 #[serde(default)]
33 pub redis_url: Option<String>,
34
35 #[serde(default)]
38 pub redis_prefix: Option<String>,
39
40 #[serde(default)]
42 pub sql_url: Option<String>,
43
44 #[serde(default = "default_l1_max_bytes")]
46 pub l1_max_bytes: usize,
47
48 #[serde(default = "default_max_payload_bytes")]
58 pub max_payload_bytes: usize,
59
60 #[serde(default = "default_backpressure_warn")]
62 pub backpressure_warn: f64,
63 #[serde(default = "default_backpressure_critical")]
64 pub backpressure_critical: f64,
65
66 #[serde(default = "default_batch_flush_ms")]
68 pub batch_flush_ms: u64,
69 #[serde(default = "default_batch_flush_count")]
70 pub batch_flush_count: usize,
71 #[serde(default = "default_batch_flush_bytes")]
72 pub batch_flush_bytes: usize,
73
74 #[serde(default = "default_cuckoo_warmup_batch_size")]
76 pub cuckoo_warmup_batch_size: usize,
77
78 #[serde(default)]
80 pub wal_path: Option<String>,
81
82 #[serde(default)]
84 pub wal_max_items: Option<u64>,
85
86 #[serde(default = "default_wal_drain_batch_size")]
88 pub wal_drain_batch_size: usize,
89
90 #[serde(default = "default_cf_snapshot_interval_secs")]
92 pub cf_snapshot_interval_secs: u64,
93
94 #[serde(default = "default_cf_snapshot_insert_threshold")]
96 pub cf_snapshot_insert_threshold: u64,
97
98 #[serde(default = "default_redis_eviction_enabled")]
100 pub redis_eviction_enabled: bool,
101
102 #[serde(default = "default_redis_eviction_start")]
104 pub redis_eviction_start: f64,
105
106 #[serde(default = "default_redis_eviction_target")]
108 pub redis_eviction_target: f64,
109}
110
111fn default_l1_max_bytes() -> usize { 256 * 1024 * 1024 } fn default_max_payload_bytes() -> usize { 16 * 1024 * 1024 } fn default_backpressure_warn() -> f64 { 0.7 }
114fn default_backpressure_critical() -> f64 { 0.9 }
115fn default_batch_flush_ms() -> u64 { 100 }
116fn default_batch_flush_count() -> usize { 1000 }
117fn default_batch_flush_bytes() -> usize { 1024 * 1024 } fn default_cuckoo_warmup_batch_size() -> usize { 10000 }
119fn default_wal_drain_batch_size() -> usize { 100 }
120fn default_cf_snapshot_interval_secs() -> u64 { 30 }
121fn default_cf_snapshot_insert_threshold() -> u64 { 10_000 }
122fn default_redis_eviction_enabled() -> bool { true }
123fn default_redis_eviction_start() -> f64 { 0.75 }
124fn default_redis_eviction_target() -> f64 { 0.60 }
125
126impl Default for SyncEngineConfig {
127 fn default() -> Self {
128 Self {
129 redis_url: None,
130 sql_url: None,
131 redis_prefix: None,
132 l1_max_bytes: default_l1_max_bytes(),
133 max_payload_bytes: default_max_payload_bytes(),
134 backpressure_warn: default_backpressure_warn(),
135 backpressure_critical: default_backpressure_critical(),
136 batch_flush_ms: default_batch_flush_ms(),
137 batch_flush_count: default_batch_flush_count(),
138 batch_flush_bytes: default_batch_flush_bytes(),
139 cuckoo_warmup_batch_size: default_cuckoo_warmup_batch_size(),
140 wal_path: None,
141 wal_max_items: None,
142 wal_drain_batch_size: default_wal_drain_batch_size(),
143 cf_snapshot_interval_secs: default_cf_snapshot_interval_secs(),
144 cf_snapshot_insert_threshold: default_cf_snapshot_insert_threshold(),
145 redis_eviction_enabled: default_redis_eviction_enabled(),
146 redis_eviction_start: default_redis_eviction_start(),
147 redis_eviction_target: default_redis_eviction_target(),
148 }
149 }
150}