use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
pub struct SyncEngineConfig {
#[serde(default)]
pub redis_url: Option<String>,
#[serde(default)]
pub redis_prefix: Option<String>,
#[serde(default)]
pub sql_url: Option<String>,
#[serde(default = "default_l1_max_bytes")]
pub l1_max_bytes: usize,
#[serde(default = "default_max_payload_bytes")]
pub max_payload_bytes: usize,
#[serde(default = "default_backpressure_warn")]
pub backpressure_warn: f64,
#[serde(default = "default_backpressure_critical")]
pub backpressure_critical: f64,
#[serde(default = "default_batch_flush_ms")]
pub batch_flush_ms: u64,
#[serde(default = "default_batch_flush_count")]
pub batch_flush_count: usize,
#[serde(default = "default_batch_flush_bytes")]
pub batch_flush_bytes: usize,
#[serde(default = "default_cuckoo_warmup_batch_size")]
pub cuckoo_warmup_batch_size: usize,
#[serde(default)]
pub wal_path: Option<String>,
#[serde(default)]
pub wal_max_items: Option<u64>,
#[serde(default = "default_wal_drain_batch_size")]
pub wal_drain_batch_size: usize,
#[serde(default = "default_cf_snapshot_interval_secs")]
pub cf_snapshot_interval_secs: u64,
#[serde(default = "default_cf_snapshot_insert_threshold")]
pub cf_snapshot_insert_threshold: u64,
#[serde(default = "default_redis_eviction_enabled")]
pub redis_eviction_enabled: bool,
#[serde(default = "default_redis_eviction_start")]
pub redis_eviction_start: f64,
#[serde(default = "default_redis_eviction_target")]
pub redis_eviction_target: f64,
#[serde(default = "default_merkle_calc_enabled")]
pub merkle_calc_enabled: bool,
#[serde(default)]
pub merkle_calc_jitter_ms: u64,
#[serde(default)]
pub enable_cdc_stream: bool,
#[serde(default = "default_cdc_stream_maxlen")]
pub cdc_stream_maxlen: u64,
#[serde(default = "default_redis_timeout_ms")]
pub redis_timeout_ms: u64,
#[serde(default = "default_redis_response_timeout_ms")]
pub redis_response_timeout_ms: u64,
#[serde(default = "default_sql_write_concurrency")]
pub sql_write_concurrency: usize,
#[serde(default)]
#[deprecated(since = "0.2.0", note = "Merkle tick removed; use cold path logging instead")]
pub merkle_log_interval_secs: u64,
}
fn default_l1_max_bytes() -> usize { 256 * 1024 * 1024 } fn default_max_payload_bytes() -> usize { 16 * 1024 * 1024 } fn default_backpressure_warn() -> f64 { 0.7 }
fn default_backpressure_critical() -> f64 { 0.9 }
fn default_batch_flush_ms() -> u64 { 100 }
fn default_batch_flush_count() -> usize { 1000 }
fn default_batch_flush_bytes() -> usize { 1024 * 1024 } fn default_cuckoo_warmup_batch_size() -> usize { 10000 }
fn default_wal_drain_batch_size() -> usize { 100 }
fn default_cf_snapshot_interval_secs() -> u64 { 30 }
fn default_cf_snapshot_insert_threshold() -> u64 { 10_000 }
fn default_redis_eviction_enabled() -> bool { true }
fn default_redis_eviction_start() -> f64 { 0.75 }
fn default_redis_eviction_target() -> f64 { 0.60 }
fn default_merkle_calc_enabled() -> bool { true }
fn default_cdc_stream_maxlen() -> u64 { 100_000 }
fn default_redis_timeout_ms() -> u64 { 5_000 }
fn default_redis_response_timeout_ms() -> u64 { 5_000 }
fn default_sql_write_concurrency() -> usize { 4 }
impl Default for SyncEngineConfig {
#[allow(deprecated)]
fn default() -> Self {
Self {
redis_url: None,
sql_url: None,
redis_prefix: None,
l1_max_bytes: default_l1_max_bytes(),
max_payload_bytes: default_max_payload_bytes(),
backpressure_warn: default_backpressure_warn(),
backpressure_critical: default_backpressure_critical(),
batch_flush_ms: default_batch_flush_ms(),
batch_flush_count: default_batch_flush_count(),
batch_flush_bytes: default_batch_flush_bytes(),
cuckoo_warmup_batch_size: default_cuckoo_warmup_batch_size(),
wal_path: None,
wal_max_items: None,
wal_drain_batch_size: default_wal_drain_batch_size(),
cf_snapshot_interval_secs: default_cf_snapshot_interval_secs(),
cf_snapshot_insert_threshold: default_cf_snapshot_insert_threshold(),
redis_eviction_enabled: default_redis_eviction_enabled(),
redis_eviction_start: default_redis_eviction_start(),
redis_eviction_target: default_redis_eviction_target(),
merkle_calc_enabled: default_merkle_calc_enabled(),
merkle_calc_jitter_ms: 0,
enable_cdc_stream: false,
cdc_stream_maxlen: default_cdc_stream_maxlen(),
redis_timeout_ms: default_redis_timeout_ms(),
redis_response_timeout_ms: default_redis_response_timeout_ms(),
sql_write_concurrency: default_sql_write_concurrency(),
merkle_log_interval_secs: 0,
}
}
}