mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-27 15:37:02 +00:00
refactor(config): normalize scanner env naming (#2129)
This commit is contained in:
@@ -49,6 +49,12 @@ Current guidance:
|
|||||||
- Deprecated example:
|
- Deprecated example:
|
||||||
- `RUSTFS_ENABLE_SCANNER` -> `RUSTFS_SCANNER_ENABLED`
|
- `RUSTFS_ENABLE_SCANNER` -> `RUSTFS_SCANNER_ENABLED`
|
||||||
- `RUSTFS_ENABLE_HEAL` -> `RUSTFS_HEAL_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
|
## 📄 License
|
||||||
|
|
||||||
|
|||||||
@@ -14,10 +14,15 @@
|
|||||||
|
|
||||||
use std::time::Duration;
|
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`.
|
/// If set, this overrides the cycle interval derived from `RUSTFS_SCANNER_SPEED`.
|
||||||
/// - Unit: seconds (u64).
|
/// - 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";
|
pub const ENV_DATA_SCANNER_START_DELAY_SECS: &str = "RUSTFS_DATA_SCANNER_START_DELAY_SECS";
|
||||||
|
|
||||||
/// Environment variable that selects the scanner speed preset.
|
/// Environment variable that selects the scanner speed preset.
|
||||||
|
|||||||
@@ -22,7 +22,10 @@ use crate::{DataUsageInfo, ScannerError};
|
|||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
use rustfs_common::heal_channel::HealScanMode;
|
use rustfs_common::heal_channel::HealScanMode;
|
||||||
use rustfs_common::metrics::{CurrentCycle, Metric, Metrics, emit_scan_cycle_complete, global_metrics};
|
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::StorageAPI as _;
|
||||||
use rustfs_ecstore::config::com::{read_config, save_config};
|
use rustfs_ecstore::config::com::{read_config, save_config};
|
||||||
use rustfs_ecstore::disk::RUSTFS_META_BUCKET;
|
use rustfs_ecstore::disk::RUSTFS_META_BUCKET;
|
||||||
@@ -35,17 +38,25 @@ use tokio::time::{Duration, Instant};
|
|||||||
use tokio_util::sync::CancellationToken;
|
use tokio_util::sync::CancellationToken;
|
||||||
use tracing::{debug, error, info, instrument, warn};
|
use tracing::{debug, error, info, instrument, warn};
|
||||||
|
|
||||||
/// Returns the base cycle interval. If `RUSTFS_DATA_SCANNER_START_DELAY_SECS`
|
const ENV_SCANNER_START_DELAY_SECS_DEPRECATED: &str = "RUSTFS_DATA_SCANNER_START_DELAY_SECS";
|
||||||
/// is set, it takes precedence; otherwise the value is derived from the
|
|
||||||
|
/// 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.
|
/// `RUSTFS_SCANNER_SPEED` preset.
|
||||||
fn cycle_interval() -> Duration {
|
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);
|
return Duration::from_secs(secs);
|
||||||
}
|
}
|
||||||
let speed_str = rustfs_utils::get_env_str(ENV_SCANNER_SPEED, DEFAULT_SCANNER_SPEED);
|
let speed_str = rustfs_utils::get_env_str(ENV_SCANNER_SPEED, DEFAULT_SCANNER_SPEED);
|
||||||
ScannerSpeed::from_env_str(&speed_str).cycle_interval()
|
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.
|
/// Compute a randomized inter-cycle sleep.
|
||||||
// Delay is scan interval +- 10%, with a floor of 1 second.
|
// Delay is scan interval +- 10%, with a floor of 1 second.
|
||||||
fn randomized_cycle_delay() -> Duration {
|
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)
|
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.
|
/// Retrieve an environment variable as a specific type, returning None if not set or parsing fails.
|
||||||
///
|
///
|
||||||
/// #Parameters
|
/// #Parameters
|
||||||
|
|||||||
Reference in New Issue
Block a user