docs/architecture/obs-ecstore-dependency-inventory.md
This inventory closes the first rustfs/backlog#735 step: make every
observability dependency on ECStore visible before introducing traits or moving
dependency direction.
No behavior or crate movement is planned in inventory PRs. The current boundary
is crates/obs/src/metrics/storage_api.rs; all direct rustfs_ecstore and
rustfs_storage_api source references in rustfs-obs must stay in that file
until the contracts below are extracted.
Current symbol in crates/obs/src/metrics/storage_api.rs | Consumed by | Classification | Purpose |
|---|---|---|---|
rustfs_ecstore::api::storage::ECStore as ObsStore | stats_collector.rs | Type dependency | Concrete object-store handle used to call storage admin methods and data-usage loaders. |
rustfs_storage_api::{BucketOperations, BucketOptions, StorageAdminApi} | stats_collector.rs | Type and trait dependency | Method-resolution and associated type contracts for bucket listing, backend info, and storage info. |
rustfs_ecstore::api::runtime::object_store_handle | stats_collector.rs | Runtime dependency | Resolves the currently published object-store handle for metric collection. |
rustfs_ecstore::api::data_usage::load_data_usage_from_backend | stats_collector.rs | Behavior dependency | Loads bucket/object usage and is projected into obs-local DTOs before collectors consume it. |
rustfs_ecstore::api::capacity::{get_total_usable_capacity, get_total_usable_capacity_free} | stats_collector.rs | Behavior dependency | Computes usable and free capacity from ECStore storage info. |
rustfs_ecstore::api::bucket::metadata_sys::get_quota_config | stats_collector.rs | Behavior dependency | Reads per-bucket quota limits used in bucket usage metrics. |
rustfs_ecstore::api::bucket::bandwidth::monitor::Monitor | runtime_sources.rs, stats_collector.rs | Type and runtime dependency | Reads replication bandwidth reports from the global bucket monitor handle. |
rustfs_ecstore::api::runtime::bucket_monitor | runtime_sources.rs | Runtime dependency | Resolves the global bucket bandwidth monitor for metric collection. |
rustfs_ecstore::api::bucket::replication::get_global_replication_stats | storage_api.rs snapshot helpers | Runtime dependency | Reads replication status, transfer, failure, and site-replication stats, then projects them into obs-local snapshot DTOs. |
rustfs_ecstore::api::bucket::lifecycle::bucket_lifecycle_ops::{GLOBAL_ExpiryState, GLOBAL_TransitionState} | runtime_sources.rs, stats_collector.rs | Runtime dependency | Reads lifecycle expiry and transition queue counters. |
rustfs_ecstore::api::error::Result as ObsEcstoreResult | stats_collector.rs | Type dependency | Preserves ECStore error propagation while data-usage behavior remains ECStore-owned. |
The remaining coupling is not just a dependency declaration problem:
ObsStore, ObsEcstoreResult, ObsBucketBandwidthMonitor,
StorageAdminApi, BucketOperations, and BucketOptions;Removing rustfs-ecstore from crates/obs/Cargo.toml is unsafe until those
three categories have replacement contracts and compile coverage.
crates/obs/src/metrics/storage_api.rs.rustfs-ecstore dependency from rustfs-obs only after metrics
behavior is unchanged through the provider traits.The architecture guard enforces this inventory boundary:
crates/obs/src/metrics/storage_api.rs is the only rustfs-obs source file
allowed to reference rustfs_ecstore or rustfs_storage_api;crates/obs/src/metrics/storage_api.rs;rustfs-obs must not add storage_compat.rs or ecstore_compat.rs
passthrough bridges;