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 #[serde(default = "default_merkle_calc_enabled")]
116 pub merkle_calc_enabled: bool,
117
118 #[serde(default)]
123 pub merkle_calc_jitter_ms: u64,
124
125 #[serde(default)]
131 pub enable_cdc_stream: bool,
132
133 #[serde(default = "default_cdc_stream_maxlen")]
138 pub cdc_stream_maxlen: u64,
139}
140
141fn default_l1_max_bytes() -> usize { 256 * 1024 * 1024 } fn default_max_payload_bytes() -> usize { 16 * 1024 * 1024 } fn default_backpressure_warn() -> f64 { 0.7 }
144fn default_backpressure_critical() -> f64 { 0.9 }
145fn default_batch_flush_ms() -> u64 { 100 }
146fn default_batch_flush_count() -> usize { 1000 }
147fn default_batch_flush_bytes() -> usize { 1024 * 1024 } fn default_cuckoo_warmup_batch_size() -> usize { 10000 }
149fn default_wal_drain_batch_size() -> usize { 100 }
150fn default_cf_snapshot_interval_secs() -> u64 { 30 }
151fn default_cf_snapshot_insert_threshold() -> u64 { 10_000 }
152fn default_redis_eviction_enabled() -> bool { true }
153fn default_redis_eviction_start() -> f64 { 0.75 }
154fn default_redis_eviction_target() -> f64 { 0.60 }
155fn default_merkle_calc_enabled() -> bool { true }
156fn default_cdc_stream_maxlen() -> u64 { 100_000 }
157
158impl Default for SyncEngineConfig {
159 fn default() -> Self {
160 Self {
161 redis_url: None,
162 sql_url: None,
163 redis_prefix: None,
164 l1_max_bytes: default_l1_max_bytes(),
165 max_payload_bytes: default_max_payload_bytes(),
166 backpressure_warn: default_backpressure_warn(),
167 backpressure_critical: default_backpressure_critical(),
168 batch_flush_ms: default_batch_flush_ms(),
169 batch_flush_count: default_batch_flush_count(),
170 batch_flush_bytes: default_batch_flush_bytes(),
171 cuckoo_warmup_batch_size: default_cuckoo_warmup_batch_size(),
172 wal_path: None,
173 wal_max_items: None,
174 wal_drain_batch_size: default_wal_drain_batch_size(),
175 cf_snapshot_interval_secs: default_cf_snapshot_interval_secs(),
176 cf_snapshot_insert_threshold: default_cf_snapshot_insert_threshold(),
177 redis_eviction_enabled: default_redis_eviction_enabled(),
178 redis_eviction_start: default_redis_eviction_start(),
179 redis_eviction_target: default_redis_eviction_target(),
180 merkle_calc_enabled: default_merkle_calc_enabled(),
181 merkle_calc_jitter_ms: 0,
182 enable_cdc_stream: false,
183 cdc_stream_maxlen: default_cdc_stream_maxlen(),
184 }
185 }
186}