mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-05 12:57:42 +00:00
66 lines
1.7 KiB
Rust
66 lines
1.7 KiB
Rust
use std::time::Duration;
|
|
|
|
use crate::{
|
|
error::{Error, Result},
|
|
utils::bool_flag::parse_bool,
|
|
};
|
|
|
|
#[derive(Debug, Default)]
|
|
pub struct Config {
|
|
pub bitrot: String,
|
|
pub sleep: Duration,
|
|
pub io_count: usize,
|
|
pub drive_workers: usize,
|
|
pub cache: Duration,
|
|
}
|
|
|
|
impl Config {
|
|
pub fn bitrot_scan_cycle(&self) -> Duration {
|
|
self.cache
|
|
}
|
|
|
|
pub fn get_workers(&self) -> usize {
|
|
self.drive_workers
|
|
}
|
|
|
|
pub fn update(&mut self, nopts: &Config) {
|
|
self.bitrot = nopts.bitrot.clone();
|
|
self.io_count = nopts.io_count;
|
|
self.sleep = nopts.sleep;
|
|
self.drive_workers = nopts.drive_workers;
|
|
}
|
|
}
|
|
|
|
const RUSTFS_BITROT_CYCLE_IN_MONTHS: u64 = 1;
|
|
|
|
fn parse_bitrot_config(s: &str) -> Result<Duration> {
|
|
match parse_bool(s) {
|
|
Ok(enabled) => {
|
|
if enabled {
|
|
return Ok(Duration::from_secs_f64(0.0));
|
|
} else {
|
|
return Ok(Duration::from_secs_f64(-1.0));
|
|
}
|
|
}
|
|
Err(_) => {
|
|
if !s.ends_with("m") {
|
|
return Err(Error::from_string("unknown format"));
|
|
}
|
|
|
|
match s.trim_end_matches('m').parse::<u64>() {
|
|
Ok(months) => {
|
|
if months < RUSTFS_BITROT_CYCLE_IN_MONTHS {
|
|
return Err(Error::from_string(format!(
|
|
"minimum bitrot cycle is {} month(s)",
|
|
RUSTFS_BITROT_CYCLE_IN_MONTHS
|
|
)));
|
|
}
|
|
|
|
Ok(Duration::from_secs(months * 30 * 24 * 60))
|
|
}
|
|
Err(err) => Err(err.into()),
|
|
}
|
|
}
|
|
}
|
|
}
|