1use std::time::Duration;
16
17use common_telemetry::warn;
18use serde::{Deserialize, Serialize};
19
20pub(crate) const DEFAULT_FLUSH_METADATA_REGION_INTERVAL: Duration = Duration::from_secs(30);
22
23#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
25pub struct EngineConfig {
26 #[serde(default = "EngineConfig::default_sparse_primary_key_encoding")]
28 pub sparse_primary_key_encoding: bool,
29 #[serde(
31 with = "humantime_serde",
32 default = "EngineConfig::default_flush_metadata_region_interval"
33 )]
34 pub flush_metadata_region_interval: Duration,
35}
36
37impl Default for EngineConfig {
38 fn default() -> Self {
39 Self {
40 flush_metadata_region_interval: DEFAULT_FLUSH_METADATA_REGION_INTERVAL,
41 sparse_primary_key_encoding: Self::default_sparse_primary_key_encoding(),
42 }
43 }
44}
45
46impl EngineConfig {
47 fn default_flush_metadata_region_interval() -> Duration {
48 DEFAULT_FLUSH_METADATA_REGION_INTERVAL
49 }
50
51 fn default_sparse_primary_key_encoding() -> bool {
52 true
53 }
54
55 pub fn sanitize(&mut self) {
57 if self.flush_metadata_region_interval.is_zero() {
58 warn!(
59 "Flush metadata region interval is zero, override with default value: {:?}. Disable metadata region flush is forbidden.",
60 DEFAULT_FLUSH_METADATA_REGION_INTERVAL
61 );
62 self.flush_metadata_region_interval = DEFAULT_FLUSH_METADATA_REGION_INTERVAL;
63 }
64 }
65}