mirror of
https://github.com/rustfs/rustfs.git
synced 2026-03-17 14:24:08 +00:00
refactor(config): normalize scanner env naming (#2129)
This commit is contained in:
@@ -49,6 +49,12 @@ Current guidance:
|
||||
- Deprecated example:
|
||||
- `RUSTFS_ENABLE_SCANNER` -> `RUSTFS_SCANNER_ENABLED`
|
||||
- `RUSTFS_ENABLE_HEAL` -> `RUSTFS_HEAL_ENABLED`
|
||||
- `RUSTFS_DATA_SCANNER_START_DELAY_SECS` -> `RUSTFS_SCANNER_START_DELAY_SECS`
|
||||
|
||||
## Scanner environment aliases
|
||||
|
||||
- `RUSTFS_SCANNER_START_DELAY_SECS` (canonical)
|
||||
- `RUSTFS_DATA_SCANNER_START_DELAY_SECS` (deprecated alias for compatibility)
|
||||
|
||||
## 📄 License
|
||||
|
||||
|
||||
@@ -14,10 +14,15 @@
|
||||
|
||||
use std::time::Duration;
|
||||
|
||||
/// Environment variable name that specifies the data scanner start delay in seconds.
|
||||
/// Canonical environment variable name that specifies the scanner start delay in seconds.
|
||||
/// If set, this overrides the cycle interval derived from `RUSTFS_SCANNER_SPEED`.
|
||||
/// - Unit: seconds (u64).
|
||||
/// - Example: `export RUSTFS_DATA_SCANNER_START_DELAY_SECS=10`
|
||||
/// - Example: `export RUSTFS_SCANNER_START_DELAY_SECS=10`
|
||||
pub const ENV_SCANNER_START_DELAY_SECS: &str = "RUSTFS_SCANNER_START_DELAY_SECS";
|
||||
|
||||
/// Deprecated compatibility alias for scanner start delay.
|
||||
/// Prefer `RUSTFS_SCANNER_START_DELAY_SECS`.
|
||||
#[deprecated(note = "Use RUSTFS_SCANNER_START_DELAY_SECS instead")]
|
||||
pub const ENV_DATA_SCANNER_START_DELAY_SECS: &str = "RUSTFS_DATA_SCANNER_START_DELAY_SECS";
|
||||
|
||||
/// Environment variable that selects the scanner speed preset.
|
||||
|
||||
@@ -22,7 +22,10 @@ use crate::{DataUsageInfo, ScannerError};
|
||||
use chrono::{DateTime, Utc};
|
||||
use rustfs_common::heal_channel::HealScanMode;
|
||||
use rustfs_common::metrics::{CurrentCycle, Metric, Metrics, emit_scan_cycle_complete, global_metrics};
|
||||
use rustfs_config::{DEFAULT_SCANNER_SPEED, ENV_DATA_SCANNER_START_DELAY_SECS, ENV_SCANNER_SPEED, ScannerSpeed};
|
||||
use rustfs_config::DEFAULT_SCANNER_SPEED;
|
||||
use rustfs_config::ENV_SCANNER_SPEED;
|
||||
use rustfs_config::ENV_SCANNER_START_DELAY_SECS;
|
||||
use rustfs_config::ScannerSpeed;
|
||||
use rustfs_ecstore::StorageAPI as _;
|
||||
use rustfs_ecstore::config::com::{read_config, save_config};
|
||||
use rustfs_ecstore::disk::RUSTFS_META_BUCKET;
|
||||
@@ -35,17 +38,25 @@ use tokio::time::{Duration, Instant};
|
||||
use tokio_util::sync::CancellationToken;
|
||||
use tracing::{debug, error, info, instrument, warn};
|
||||
|
||||
/// Returns the base cycle interval. If `RUSTFS_DATA_SCANNER_START_DELAY_SECS`
|
||||
/// is set, it takes precedence; otherwise the value is derived from the
|
||||
const ENV_SCANNER_START_DELAY_SECS_DEPRECATED: &str = "RUSTFS_DATA_SCANNER_START_DELAY_SECS";
|
||||
|
||||
/// Returns the base cycle interval. If `RUSTFS_SCANNER_START_DELAY_SECS`
|
||||
/// is set (or `RUSTFS_DATA_SCANNER_START_DELAY_SECS` as deprecated alias),
|
||||
/// it takes precedence; otherwise the value is derived from the
|
||||
/// `RUSTFS_SCANNER_SPEED` preset.
|
||||
fn cycle_interval() -> Duration {
|
||||
if let Some(secs) = rustfs_utils::get_env_opt_u64(ENV_DATA_SCANNER_START_DELAY_SECS) {
|
||||
if let Some(secs) = scanner_start_delay_secs() {
|
||||
return Duration::from_secs(secs);
|
||||
}
|
||||
let speed_str = rustfs_utils::get_env_str(ENV_SCANNER_SPEED, DEFAULT_SCANNER_SPEED);
|
||||
ScannerSpeed::from_env_str(&speed_str).cycle_interval()
|
||||
}
|
||||
|
||||
fn scanner_start_delay_secs() -> Option<u64> {
|
||||
let deprecated = [ENV_SCANNER_START_DELAY_SECS_DEPRECATED];
|
||||
rustfs_utils::get_env_opt_u64_with_aliases(ENV_SCANNER_START_DELAY_SECS, &deprecated)
|
||||
}
|
||||
|
||||
/// Compute a randomized inter-cycle sleep.
|
||||
// Delay is scan interval +- 10%, with a floor of 1 second.
|
||||
fn randomized_cycle_delay() -> Duration {
|
||||
|
||||
@@ -310,6 +310,28 @@ pub fn get_env_u64(key: &str, default: u64) -> u64 {
|
||||
env::var(key).ok().and_then(|v| v.parse().ok()).unwrap_or(default)
|
||||
}
|
||||
|
||||
/// Retrieve an environment variable as an unsigned 64-bit integer, returning `None` if not set or parsing fails.
|
||||
/// Deprecated aliases are also supported with warning logging.
|
||||
///
|
||||
/// #Parameters
|
||||
/// - `key`: The canonical environment variable key to look up.
|
||||
/// - `deprecated`: A list of deprecated keys kept for compatibility.
|
||||
///
|
||||
/// #Returns
|
||||
/// - `Option<u64>`: The parsed value if a key is found and valid, otherwise `None`.
|
||||
///
|
||||
pub fn get_env_opt_u64_with_aliases(key: &str, deprecated: &[&str]) -> Option<u64> {
|
||||
let (used_key, value) = resolve_env_with_aliases(key, deprecated)?;
|
||||
value
|
||||
.parse::<u64>()
|
||||
.map_err(|_| {
|
||||
log_once(&format!("env_invalid_u64:{used_key}"), || {
|
||||
format!("Invalid u64 value for {used_key}: {value}. Using default behavior.")
|
||||
});
|
||||
})
|
||||
.ok()
|
||||
}
|
||||
|
||||
/// Retrieve an environment variable as a specific type, returning None if not set or parsing fails.
|
||||
///
|
||||
/// #Parameters
|
||||
|
||||
Reference in New Issue
Block a user