* chore: adjudicate the last 18 bare dead_code allows in the library crates Finishes backlog#1823 step 10 outside `rustfs/src` and `protocols`: config, s3select-query, common, madmin, heal, ecstore, signer and notify. Stripped first, then clippy asked which the compiler actually missed — 8 of the 18 were inert. Seven items are deleted, each checked by grep as well as by clippy: - `common/last_minute.rs`'s private `TimedAction` (with its impl) and `SizeCategory` (with its `Display` impl). The file's public surface — `AccElem`, `LastMinuteLatency` — stays; ecstore consumes it. - `s3select-query`'s three `with_*` builders. `DefaultLogicalOptimizer::with_optimizer_rules` looks used, but the call in the same file is `SessionStateBuilder::with_optimizer_rules` from DataFusion; the local methods have no callers. - `heal/manager.rs`'s `contains_key`. Its six apparent references are all `HashMap::contains_key`. Three keep their code: - `heal/storage.rs`'s `Test` variant is constructed by the `#[cfg(test)] test()` helper, which the lib target cannot see, so it takes a reasoned allow. - `signer`'s `STREAMING_PAYLOAD_HDR` and `try_build_chunk_string_to_sign` gain the `_` prefix instead. That file already marks deliberately-unheld code that way — `_STREAMING_TRAILER_HDR`, `_PAYLOAD_CHUNK_SIZE`, and `_try_build_chunk_signature`, which is the only caller of that function. Following the existing convention removes the allow without an attribute. `protocols` keeps its four; that crate needs `--features swift,sftp` to compile fully and is verified differently. The four `#![allow(dead_code)]` in `e2e_test` are module-root blankets in test-support files, which belong to steps 1-5 rather than step 10. Refs backlog#1823 * chore(e2e_test): adjudicate the two dead_code allows the lib test target still needs `cargo clippy --all-targets` compiles e2e_test's lib test target, which the earlier pass did not cover, so these two removals only surfaced in CI. test_large_multipart_upload's allow was load-bearing: its call site in test_local_kms_multipart_upload is commented out behind "TODO: Re-enable after fixing streaming encryption issues with large files". The allow comes back with the reason string this batch uses everywhere else, so the next reader sees why it is parked instead of deleting a test we intend to run again. TestDefinition.category was the opposite: written at all six definitions, read nowhere, and its enum's impl block is empty. The live copy of that type is crates/e2e_test/src/kms/test_runner.rs, which has an as_str; the policy copy is a vestige of it. Dropping the field, the enum, and the constructor parameter leaves the runner unchanged — it dispatches on name and filters on is_critical. Verification: cargo clippy --all-targets -- -D warnings (workspace, the CI command) and cargo fmt --all --check both pass. --------- Co-authored-by: houseme <housemecn@gmail.com>
RustFS Config - Configuration Management
Configuration management and validation module for RustFS distributed object storage
📖 Documentation
· 🐛 Bug Reports
· 💬 Discussions
📖 Overview
RustFS Config provides configuration management and validation capabilities for the RustFS distributed object storage system. For the complete RustFS experience, please visit the main RustFS repository.
✨ Features
- Multi-format configuration support (TOML, YAML, JSON, ENV)
- Environment variable integration and override
- Configuration validation and type safety
- Hot-reload capabilities for dynamic updates
- Default value management and fallbacks
- Secure credential handling and encryption
📚 Documentation
For comprehensive documentation, examples, and usage guides, please visit the main RustFS repository.
Environment Variable Naming Conventions
RustFS uses a flat naming style for top-level configuration: environment variables are RUSTFS_* without nested module segments.
Examples:
RUSTFS_REGIONRUSTFS_ADDRESSRUSTFS_VOLUMESRUSTFS_LICENSERUSTFS_LICENSE_PUBLIC_KEY
Current guidance:
- Prefer module-specific names only when they are not top-level product configuration.
- Renamed variables must keep backward-compatible aliases until before beta.
- Alias usage must emit deprecation warnings and be treated as transitional only.
- Deprecated example:
RUSTFS_ENABLE_SCANNER->RUSTFS_SCANNER_ENABLEDRUSTFS_ENABLE_HEAL->RUSTFS_HEAL_ENABLEDRUSTFS_DATA_SCANNER_START_DELAY_SECS->RUSTFS_SCANNER_START_DELAY_SECS
License environment variables
RUSTFS_LICENSEcontains the signed license token.RUSTFS_LICENSE_PUBLIC_KEYcontains the RSA public key used to verify signed license tokens.
CORS environment variables
RUSTFS_CORS_ALLOWED_ORIGINSdefaults to empty, so the S3 endpoint emits no generic CORS headers unless configured. Set*for wildcard origins without credentials, or a comma-separated allow-list for credentialed explicit origins.RUSTFS_CONSOLE_CORS_ALLOWED_ORIGINSdefaults to*for the console service.
Browser redirect environment variables
RUSTFS_BROWSER_REDIRECT_URLsets the externally reachable browser origin used for OIDC callback, console success redirect, and logout fallback URLs. Configure it to the public scheme and authority without a path, for examplehttps://console.example.com. In load-balancer deployments, keep OIDC authorize and callback requests on the same backend node because the in-flight OIDCstateis local to the RustFS node.
Distributed endpoint locality
RUSTFS_LOCAL_ENDPOINT_HOSTidentifies this server's host in a distributedRUSTFS_VOLUMEStopology without resolving every peer during startup. Set it to exactly one host, without a scheme, port, or path. It is accepted only for orchestrated URL topologies and must match at least one endpoint on the RustFS server port; invalid or unmatched values fail startup. Leave it unset to retain DNS-based locality discovery.
Scanner environment aliases
RUSTFS_SCANNER_SPEED(canonical, also acceptsMINIO_SCANNER_SPEED)RUSTFS_SCANNER_DELAY(canonical)RUSTFS_SCANNER_MAX_WAIT_SECS(canonical)RUSTFS_SCANNER_CYCLE(canonical, also acceptsMINIO_SCANNER_CYCLE)RUSTFS_SCANNER_START_DELAY_SECS(canonical)RUSTFS_DATA_SCANNER_START_DELAY_SECS(deprecated alias for compatibility)RUSTFS_SCANNER_IDLE_MODE(canonical)RUSTFS_SCANNER_CACHE_SAVE_TIMEOUT_SECS(canonical)RUSTFS_SCANNER_CYCLE_MAX_DURATION_SECS(canonical)RUSTFS_SCANNER_CYCLE_MAX_OBJECTS(canonical)RUSTFS_SCANNER_CYCLE_MAX_DIRECTORIES(canonical)
Mmap read environment aliases
RUSTFS_OBJECT_MMAP_READ_ENABLE(canonical)RUSTFS_OBJECT_ZERO_COPY_ENABLE(deprecated alias for compatibility)
Health compatibility switches
RUSTFS_HEALTH_ENDPOINT_ENABLE- controls canonical
/health,/health/live, and/health/readyendpoint exposure.
- controls canonical
RUSTFS_HEALTH_MINIMAL_RESPONSE_ENABLE- enables minimal payload mode for GET health responses (
status,readyonly).
- enables minimal payload mode for GET health responses (
RUSTFS_HEALTH_READINESS_CACHE_TTL_MS- TTL for readiness cache evaluation.
RUSTFS_HEALTH_OBJECT_PROGRESS_ENABLE- withdraws readiness when bounded object read/write stages stop completing while requests remain active.
- default is
true.
RUSTFS_HEALTH_OBJECT_PROGRESS_TIMEOUT_MS- maximum time without completion in a bounded object stage before readiness is withdrawn.
- default is
30000;0uses the default. - the effective value is at least 5 seconds longer than
RUSTFS_OBJECT_LOCK_ACQUIRE_TIMEOUT. - this readiness SLO is independent of disk read/write failure deadlines and may withdraw traffic before those deadlines expire.
RUSTFS_HEALTH_COMPAT_BUSY_CHECK_ENABLE- enables busy protection behavior for health probes.
- default is
false.
RUSTFS_HEALTH_COMPAT_BUSY_MAX_ACTIVE_REQUESTS- max active HTTP requests; health probes return
429when active requests reach or exceed this value. 0disables thresholding even if busy protection is enabled.
- max active HTTP requests; health probes return
RUSTFS_HEALTH_COMPAT_KMS_READY_CHECK_ENABLE- enables KMS readiness enforcement for
/health/ready. - default is
false.
- enables KMS readiness enforcement for
Drive timeout environment variables
RUSTFS_DRIVE_METADATA_TIMEOUT_SECSRUSTFS_DRIVE_DISK_INFO_TIMEOUT_SECSRUSTFS_DRIVE_LIST_DIR_TIMEOUT_SECSRUSTFS_DRIVE_WALKDIR_TIMEOUT_SECSRUSTFS_DRIVE_WALKDIR_STALL_TIMEOUT_SECS
Legacy compatibility fallback:
RUSTFS_DRIVE_MAX_TIMEOUT_DURATIONThis legacy variable is treated as a deprecated fallback for the operation-specific drive timeout variables above when a canonical variable is unset.
Drive timeout health-action policy:
RUSTFS_DRIVE_TIMEOUT_HEALTH_ACTIONmark_failure(default): timeout marks failure and may transition drive runtime state.ignore_scanner: timeout does not mark failure for scanner-sensitive operations (walk_dir,read_metadata,list_dir,disk_info).
Drive timeout profile preset:
RUSTFS_DRIVE_TIMEOUT_PROFILEdefault(default): keep current timeout defaults.high_latency: use 60s default timeout for scanner-sensitive operations when no per-operation timeout override is set (read_metadata,disk_info,list_dir,walk_dir,walk_dir_stall).
- Precedence:
- Explicit per-operation timeout env (
RUSTFS_DRIVE_*_TIMEOUT_SECS) takes highest precedence. - Then
RUSTFS_DRIVE_MAX_TIMEOUT_DURATIONlegacy fallback. - Then the profile-derived default (
defaultorhigh_latency).
- Explicit per-operation timeout env (
Startup filesystem boundary policy
RUSTFS_UNSUPPORTED_FS_POLICYcontrols startup behavior when RustFS detects local endpoint filesystems that are outside the supported production boundary.warn(default): log warning and continue startup.fail: abort startup with an error.
RustFS production guidance remains direct-attached local POSIX filesystems. Network-mounted filesystems (for example nfs, cifs, smb2, and fuse.*) are treated as unsupported by this startup guard.
📄 License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
