bitrust/
config.rs

1use serde::{Deserialize, Serialize};
2
3use std::path::PathBuf;
4
5pub const DEFAULT_FILE_SIZE_SOFT_LIMIT_BYTES: i64 = 10 << 20; // 10MiB
6
7fn default_file_size_soft_limit_bytes() -> i64 {
8  DEFAULT_FILE_SIZE_SOFT_LIMIT_BYTES
9}
10
11fn default_require_hint_file_write_success() -> bool {
12  false
13}
14
15#[derive(Deserialize, Debug, Clone, Serialize)]
16pub struct AutoMergeConfig {
17  /// How often to check if a merge can be performed.
18  pub check_interval_secs: u64,
19  /// Minimum number of inactive datafiles for a merge to be triggered.
20  pub min_inactive_files: i32,
21}
22
23#[derive(Deserialize, Debug, Clone, Serialize)]
24pub struct MergeConfig {
25  /// Whether failure writing hintfiles should fail merges. Hintfiles speed up
26  /// initial startup, but beyond that are not necessary for correctness.
27  #[serde(default = "default_require_hint_file_write_success")]
28  pub require_hint_file_write_success: bool,
29  #[serde(default)]
30  pub auto_merge_config: Option<AutoMergeConfig>,
31}
32
33impl Default for MergeConfig {
34  fn default() -> MergeConfig {
35    MergeConfig {
36      require_hint_file_write_success: false,
37      auto_merge_config: None,
38    }
39  }
40}
41
42#[derive(Deserialize, Debug, Clone, Serialize)]
43pub struct Config {
44  /// Main data directory where BitRust datafiles are kept.
45  pub datadir: PathBuf,
46  #[serde(default = "default_file_size_soft_limit_bytes")]
47  pub file_size_soft_limit_bytes: i64,
48  #[serde(default)]
49  pub merge_config: MergeConfig,
50}
51
52#[cfg(test)]
53mod tests {
54  use super::*;
55  #[test]
56  fn test_read_minimal_config() {
57    let cfg: Config = toml::from_str(
58      r#"
59    datadir = "/home/ysagade/bitrust_data"
60    "#,
61    )
62    .unwrap();
63    println!("Parsed: {:?}", cfg);
64  }
65}