Skip to main content

rustfs_config/constants/
capacity.rs

1// Copyright 2024 RustFS Team
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15//! Capacity calculation configuration constants
16
17// ============================================================================
18// Environment Variable Names
19// ============================================================================
20
21/// Environment variable for scheduled update interval
22pub const ENV_CAPACITY_SCHEDULED_INTERVAL: &str = "RUSTFS_CAPACITY_SCHEDULED_INTERVAL";
23
24/// Environment variable for write trigger delay
25pub const ENV_CAPACITY_WRITE_TRIGGER_DELAY: &str = "RUSTFS_CAPACITY_WRITE_TRIGGER_DELAY";
26
27/// Environment variable for write frequency threshold
28pub const ENV_CAPACITY_WRITE_FREQUENCY_THRESHOLD: &str = "RUSTFS_CAPACITY_WRITE_FREQUENCY_THRESHOLD";
29
30/// Environment variable for fast update threshold
31pub const ENV_CAPACITY_FAST_UPDATE_THRESHOLD: &str = "RUSTFS_CAPACITY_FAST_UPDATE_THRESHOLD";
32
33/// Environment variable for max files threshold
34pub const ENV_CAPACITY_MAX_FILES_THRESHOLD: &str = "RUSTFS_CAPACITY_MAX_FILES_THRESHOLD";
35
36/// Environment variable for statistics timeout
37pub const ENV_CAPACITY_STAT_TIMEOUT: &str = "RUSTFS_CAPACITY_STAT_TIMEOUT";
38
39/// Environment variable for sample rate
40pub const ENV_CAPACITY_SAMPLE_RATE: &str = "RUSTFS_CAPACITY_SAMPLE_RATE";
41
42/// Environment variable for metrics logging interval
43pub const ENV_CAPACITY_METRICS_INTERVAL: &str = "RUSTFS_CAPACITY_METRICS_INTERVAL";
44
45/// Environment variable for following symbolic links during capacity calculation
46pub const ENV_CAPACITY_FOLLOW_SYMLINKS: &str = "RUSTFS_CAPACITY_FOLLOW_SYMLINKS";
47
48/// Environment variable for enabling dynamic timeout calculation
49pub const ENV_CAPACITY_ENABLE_DYNAMIC_TIMEOUT: &str = "RUSTFS_CAPACITY_ENABLE_DYNAMIC_TIMEOUT";
50
51/// Environment variable for minimum capacity calculation timeout
52pub const ENV_CAPACITY_MIN_TIMEOUT: &str = "RUSTFS_CAPACITY_MIN_TIMEOUT";
53
54/// Environment variable for maximum capacity calculation timeout
55pub const ENV_CAPACITY_MAX_TIMEOUT: &str = "RUSTFS_CAPACITY_MAX_TIMEOUT";
56
57// ============================================================================
58// Default Values
59// ============================================================================
60
61/// Scheduled update interval in seconds
62/// Default: 600 seconds (10 minutes)
63pub const DEFAULT_SCHEDULED_UPDATE_INTERVAL_SECS: u64 = 600;
64
65/// Write trigger delay in seconds
66/// Default: 30 seconds
67pub const DEFAULT_WRITE_TRIGGER_DELAY_SECS: u64 = 30;
68
69/// Write frequency threshold (writes per minute)
70/// Default: 20 writes/minute
71pub const DEFAULT_WRITE_FREQUENCY_THRESHOLD: usize = 20;
72
73/// Fast update threshold in seconds
74/// Default: 120 seconds
75pub const DEFAULT_FAST_UPDATE_THRESHOLD_SECS: u64 = 120;
76
77/// Maximum files threshold for sampling
78/// Default: 200,000 files
79pub const DEFAULT_MAX_FILES_THRESHOLD: usize = 200_000;
80
81/// Statistics timeout in seconds
82/// Default: 3 seconds
83pub const DEFAULT_STAT_TIMEOUT_SECS: u64 = 3;
84
85/// Sampling rate (1 in every N files)
86/// Default: 200
87pub const DEFAULT_SAMPLE_RATE: usize = 200;
88
89/// Capacity metrics logging interval in seconds
90/// Default: 600 seconds (10 minutes)
91pub const DEFAULT_CAPACITY_METRICS_INTERVAL_SECS: u64 = 600;
92
93/// Follow symbolic links during capacity calculation
94/// Default: false (disabled for safety)
95pub const DEFAULT_CAPACITY_FOLLOW_SYMLINKS: bool = false;
96
97/// Enable dynamic timeout calculation based on directory characteristics
98/// Default: true (enabled)
99pub const DEFAULT_CAPACITY_ENABLE_DYNAMIC_TIMEOUT: bool = true;
100
101/// Minimum capacity calculation timeout in seconds
102/// Default: 2 seconds
103pub const DEFAULT_CAPACITY_MIN_TIMEOUT_SECS: u64 = 2;
104
105/// Maximum capacity calculation timeout in seconds
106/// Default: 15 seconds
107pub const DEFAULT_CAPACITY_MAX_TIMEOUT_SECS: u64 = 15;
108
109// ============================================================================
110// Tests
111// ============================================================================
112
113#[cfg(test)]
114mod tests {
115    use super::*;
116
117    #[test]
118    fn test_env_var_names() {
119        assert_eq!(ENV_CAPACITY_SCHEDULED_INTERVAL, "RUSTFS_CAPACITY_SCHEDULED_INTERVAL");
120        assert_eq!(ENV_CAPACITY_WRITE_TRIGGER_DELAY, "RUSTFS_CAPACITY_WRITE_TRIGGER_DELAY");
121        assert_eq!(ENV_CAPACITY_WRITE_FREQUENCY_THRESHOLD, "RUSTFS_CAPACITY_WRITE_FREQUENCY_THRESHOLD");
122        assert_eq!(ENV_CAPACITY_FAST_UPDATE_THRESHOLD, "RUSTFS_CAPACITY_FAST_UPDATE_THRESHOLD");
123        assert_eq!(ENV_CAPACITY_MAX_FILES_THRESHOLD, "RUSTFS_CAPACITY_MAX_FILES_THRESHOLD");
124        assert_eq!(ENV_CAPACITY_STAT_TIMEOUT, "RUSTFS_CAPACITY_STAT_TIMEOUT");
125        assert_eq!(ENV_CAPACITY_SAMPLE_RATE, "RUSTFS_CAPACITY_SAMPLE_RATE");
126        assert_eq!(ENV_CAPACITY_METRICS_INTERVAL, "RUSTFS_CAPACITY_METRICS_INTERVAL");
127        assert_eq!(ENV_CAPACITY_FOLLOW_SYMLINKS, "RUSTFS_CAPACITY_FOLLOW_SYMLINKS");
128        assert_eq!(ENV_CAPACITY_ENABLE_DYNAMIC_TIMEOUT, "RUSTFS_CAPACITY_ENABLE_DYNAMIC_TIMEOUT");
129        assert_eq!(ENV_CAPACITY_MIN_TIMEOUT, "RUSTFS_CAPACITY_MIN_TIMEOUT");
130        assert_eq!(ENV_CAPACITY_MAX_TIMEOUT, "RUSTFS_CAPACITY_MAX_TIMEOUT");
131    }
132
133    #[test]
134    fn test_capacity_default_values() {
135        assert_eq!(DEFAULT_SCHEDULED_UPDATE_INTERVAL_SECS, 600);
136        assert_eq!(DEFAULT_WRITE_TRIGGER_DELAY_SECS, 30);
137        assert_eq!(DEFAULT_WRITE_FREQUENCY_THRESHOLD, 20);
138        assert_eq!(DEFAULT_FAST_UPDATE_THRESHOLD_SECS, 120);
139        assert_eq!(DEFAULT_MAX_FILES_THRESHOLD, 200_000);
140        assert_eq!(DEFAULT_STAT_TIMEOUT_SECS, 3);
141        assert_eq!(DEFAULT_SAMPLE_RATE, 200);
142        assert_eq!(DEFAULT_CAPACITY_METRICS_INTERVAL_SECS, 600);
143    }
144}