mirror of
https://github.com/rustfs/rustfs.git
synced 2026-07-26 16:28:15 +00:00
cf2da0c44d
The tracker never influenced traversal: walkdir's follow behavior is fixed up front by follow_links(), and should_follow() only gated the tracker's own bookkeeping. Its 'depth limit' compared tree depth (not symlink chain depth), so RUSTFS_CAPACITY_MAX_SYMLINK_DEPTH was a complete no-op while its telemetry claimed symlinks were skipped that walkdir had in fact followed and counted; record_symlink was always called with size 0, so tracked_bytes never left zero (S12). Remove the tracker, its skipped/summary events, the symlink metric and the depth env knob end to end (the env's 'as u8' truncation goes with it), and document the real semantics at the walker: follow_links(true) counts targets with walkdir's ancestor-loop detection breaking cycles, follow_links(false) — the default — counts no symlink targets. The scan root itself is pre-resolved since backlog#1015. Ref: rustfs/backlog#1018 (S12 from audit rustfs/backlog#1010)
133 lines
5.5 KiB
Rust
133 lines
5.5 KiB
Rust
// Copyright 2024 RustFS Team
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
//! Capacity calculation configuration constants
|
|
|
|
// ============================================================================
|
|
// Environment Variable Names
|
|
// ============================================================================
|
|
|
|
/// Environment variable for scheduled update interval
|
|
pub const ENV_CAPACITY_SCHEDULED_INTERVAL: &str = "RUSTFS_CAPACITY_SCHEDULED_INTERVAL";
|
|
|
|
/// Environment variable for write trigger delay
|
|
pub const ENV_CAPACITY_WRITE_TRIGGER_DELAY: &str = "RUSTFS_CAPACITY_WRITE_TRIGGER_DELAY";
|
|
|
|
/// Environment variable for write frequency threshold
|
|
pub const ENV_CAPACITY_WRITE_FREQUENCY_THRESHOLD: &str = "RUSTFS_CAPACITY_WRITE_FREQUENCY_THRESHOLD";
|
|
|
|
/// Environment variable for fast update threshold
|
|
pub const ENV_CAPACITY_FAST_UPDATE_THRESHOLD: &str = "RUSTFS_CAPACITY_FAST_UPDATE_THRESHOLD";
|
|
|
|
/// Environment variable for max files threshold
|
|
pub const ENV_CAPACITY_MAX_FILES_THRESHOLD: &str = "RUSTFS_CAPACITY_MAX_FILES_THRESHOLD";
|
|
|
|
/// Environment variable for statistics timeout
|
|
pub const ENV_CAPACITY_STAT_TIMEOUT: &str = "RUSTFS_CAPACITY_STAT_TIMEOUT";
|
|
|
|
/// Environment variable for sample rate
|
|
pub const ENV_CAPACITY_SAMPLE_RATE: &str = "RUSTFS_CAPACITY_SAMPLE_RATE";
|
|
|
|
/// Environment variable for metrics logging interval
|
|
pub const ENV_CAPACITY_METRICS_INTERVAL: &str = "RUSTFS_CAPACITY_METRICS_INTERVAL";
|
|
|
|
/// Environment variable for following symbolic links during capacity calculation
|
|
pub const ENV_CAPACITY_FOLLOW_SYMLINKS: &str = "RUSTFS_CAPACITY_FOLLOW_SYMLINKS";
|
|
|
|
/// Environment variable for enabling dynamic timeout calculation
|
|
pub const ENV_CAPACITY_ENABLE_DYNAMIC_TIMEOUT: &str = "RUSTFS_CAPACITY_ENABLE_DYNAMIC_TIMEOUT";
|
|
|
|
/// Environment variable for minimum capacity calculation timeout
|
|
pub const ENV_CAPACITY_MIN_TIMEOUT: &str = "RUSTFS_CAPACITY_MIN_TIMEOUT";
|
|
|
|
/// Environment variable for maximum capacity calculation timeout
|
|
pub const ENV_CAPACITY_MAX_TIMEOUT: &str = "RUSTFS_CAPACITY_MAX_TIMEOUT";
|
|
|
|
// ============================================================================
|
|
// Default Values
|
|
// ============================================================================
|
|
|
|
/// Scheduled update interval in seconds
|
|
/// Default: 120 seconds (2 minutes)
|
|
pub const DEFAULT_SCHEDULED_UPDATE_INTERVAL_SECS: u64 = 120;
|
|
|
|
/// Write trigger delay in seconds
|
|
/// Default: 5 seconds
|
|
pub const DEFAULT_WRITE_TRIGGER_DELAY_SECS: u64 = 5;
|
|
|
|
/// Write frequency threshold (writes per minute)
|
|
/// Default: 5 writes/minute
|
|
pub const DEFAULT_WRITE_FREQUENCY_THRESHOLD: usize = 5;
|
|
|
|
/// Fast update threshold in seconds
|
|
/// Default: 30 seconds
|
|
pub const DEFAULT_FAST_UPDATE_THRESHOLD_SECS: u64 = 30;
|
|
|
|
/// Maximum files threshold for sampling
|
|
/// Default: 200,000 files
|
|
pub const DEFAULT_MAX_FILES_THRESHOLD: usize = 200_000;
|
|
|
|
/// Statistics timeout in seconds
|
|
/// Default: 3 seconds
|
|
pub const DEFAULT_STAT_TIMEOUT_SECS: u64 = 3;
|
|
|
|
/// Sampling rate (1 in every N files)
|
|
/// Default: 200
|
|
pub const DEFAULT_SAMPLE_RATE: usize = 200;
|
|
|
|
/// Capacity metrics logging interval in seconds
|
|
/// Default: 600 seconds (10 minutes)
|
|
pub const DEFAULT_CAPACITY_METRICS_INTERVAL_SECS: u64 = 600;
|
|
|
|
/// Follow symbolic links during capacity calculation
|
|
/// Default: false (disabled for safety)
|
|
pub const DEFAULT_CAPACITY_FOLLOW_SYMLINKS: bool = false;
|
|
|
|
/// Enable dynamic timeout calculation based on directory characteristics
|
|
/// Default: true (enabled)
|
|
pub const DEFAULT_CAPACITY_ENABLE_DYNAMIC_TIMEOUT: bool = true;
|
|
|
|
/// Minimum capacity calculation timeout in seconds
|
|
/// Default: 2 seconds
|
|
pub const DEFAULT_CAPACITY_MIN_TIMEOUT_SECS: u64 = 2;
|
|
|
|
/// Maximum capacity calculation timeout in seconds
|
|
/// Default: 15 seconds
|
|
pub const DEFAULT_CAPACITY_MAX_TIMEOUT_SECS: u64 = 15;
|
|
|
|
// ============================================================================
|
|
// Tests
|
|
// ============================================================================
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_env_var_names() {
|
|
assert_eq!(ENV_CAPACITY_SCHEDULED_INTERVAL, "RUSTFS_CAPACITY_SCHEDULED_INTERVAL");
|
|
assert_eq!(ENV_CAPACITY_WRITE_TRIGGER_DELAY, "RUSTFS_CAPACITY_WRITE_TRIGGER_DELAY");
|
|
assert_eq!(ENV_CAPACITY_WRITE_FREQUENCY_THRESHOLD, "RUSTFS_CAPACITY_WRITE_FREQUENCY_THRESHOLD");
|
|
assert_eq!(ENV_CAPACITY_FAST_UPDATE_THRESHOLD, "RUSTFS_CAPACITY_FAST_UPDATE_THRESHOLD");
|
|
assert_eq!(ENV_CAPACITY_MAX_FILES_THRESHOLD, "RUSTFS_CAPACITY_MAX_FILES_THRESHOLD");
|
|
assert_eq!(ENV_CAPACITY_STAT_TIMEOUT, "RUSTFS_CAPACITY_STAT_TIMEOUT");
|
|
assert_eq!(ENV_CAPACITY_SAMPLE_RATE, "RUSTFS_CAPACITY_SAMPLE_RATE");
|
|
assert_eq!(ENV_CAPACITY_METRICS_INTERVAL, "RUSTFS_CAPACITY_METRICS_INTERVAL");
|
|
assert_eq!(ENV_CAPACITY_FOLLOW_SYMLINKS, "RUSTFS_CAPACITY_FOLLOW_SYMLINKS");
|
|
assert_eq!(ENV_CAPACITY_ENABLE_DYNAMIC_TIMEOUT, "RUSTFS_CAPACITY_ENABLE_DYNAMIC_TIMEOUT");
|
|
assert_eq!(ENV_CAPACITY_MIN_TIMEOUT, "RUSTFS_CAPACITY_MIN_TIMEOUT");
|
|
assert_eq!(ENV_CAPACITY_MAX_TIMEOUT, "RUSTFS_CAPACITY_MAX_TIMEOUT");
|
|
}
|
|
}
|