mirror of
https://github.com/rustfs/rustfs.git
synced 2026-07-29 01:29:00 +00:00
refactor(obs): hide replication stats handle (#4149)
This commit is contained in:
@@ -189,6 +189,10 @@ Required contracts before crate movement:
|
||||
- `ReplicationObjectBridge`: app and SetDisks object write/delete replication
|
||||
decisions and scheduling are exposed through the contract type in
|
||||
`crates/ecstore/src/bucket/replication/replication_object_bridge.rs`.
|
||||
- `ObsReplicationStatsSnapshot`: observability reads replication bucket/site
|
||||
metrics through obs-local snapshot DTOs in
|
||||
`crates/obs/src/metrics/storage_api.rs` instead of carrying the ECStore
|
||||
replication stats handle through collectors.
|
||||
- `ReplicationScannerBridge`: scanner-originated replication heal scheduling is
|
||||
exposed through the contract type in
|
||||
`crates/ecstore/src/bucket/replication/replication_scanner_bridge.rs`.
|
||||
|
||||
@@ -21,7 +21,7 @@ until the contracts below are extracted.
|
||||
| `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::{GLOBAL_REPLICATION_STATS, ReplicationStats}` | `runtime_sources.rs`, `stats_collector.rs` | Type and runtime dependency | Reads replication status, transfer, failure, and site-replication stats. |
|
||||
| `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. |
|
||||
|
||||
@@ -29,11 +29,10 @@ until the contracts below are extracted.
|
||||
|
||||
The remaining coupling is not just a dependency declaration problem:
|
||||
|
||||
- type coupling: `ObsStore`, `ObsEcstoreResult`, `ObsReplicationStats`,
|
||||
`ObsBucketBandwidthMonitor`, `StorageAdminApi`, `BucketOperations`, and
|
||||
`BucketOptions`;
|
||||
- type coupling: `ObsStore`, `ObsEcstoreResult`, `ObsBucketBandwidthMonitor`,
|
||||
`StorageAdminApi`, `BucketOperations`, and `BucketOptions`;
|
||||
- runtime handle coupling: object-store handle, bucket monitor, replication
|
||||
stats, expiry state, and transition state;
|
||||
stats inside snapshot helpers, expiry state, and transition state;
|
||||
- behavior coupling: data-usage loading, quota lookup, and capacity math.
|
||||
|
||||
Removing `rustfs-ecstore` from `crates/obs/Cargo.toml` is unsafe until those
|
||||
@@ -43,8 +42,8 @@ three categories have replacement contracts and compile coverage.
|
||||
|
||||
1. Keep all direct ECStore and storage-api imports centralized in
|
||||
`crates/obs/src/metrics/storage_api.rs`.
|
||||
2. Keep projecting ECStore data-usage output into obs-local DTOs before
|
||||
collectors consume it.
|
||||
2. Keep projecting ECStore data-usage and replication stats output into
|
||||
obs-local DTOs before collectors consume it.
|
||||
3. Introduce obs-owned provider traits for storage info, bucket info, quota,
|
||||
data usage, replication, bandwidth, and lifecycle queue snapshots.
|
||||
4. Implement those traits in ECStore or an ECStore-owned adapter crate after the
|
||||
@@ -58,6 +57,8 @@ 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`;
|
||||
- raw replication stats handles and ECStore replication stat methods must stay
|
||||
behind the snapshot helpers in `crates/obs/src/metrics/storage_api.rs`;
|
||||
- `rustfs-obs` must not add `storage_compat.rs` or `ecstore_compat.rs`
|
||||
passthrough bridges;
|
||||
- future extraction PRs must update this inventory and the guard in the same
|
||||
|
||||
Reference in New Issue
Block a user