mirror of
https://github.com/rustfs/rustfs.git
synced 2026-07-27 08:38:58 +00:00
5.4 KiB
5.4 KiB
ECStore API Facade Inventory
This inventory records the current rustfs_ecstore::api compatibility surface
before any ECStore split PR removes or narrows re-exports. It is a planning and
guardrail document only. It must not be used as approval to move lifecycle,
replication, or SetDisks runtime behavior.
Facade Group Inventory
| Facade group | Current role | Shrink posture |
|---|---|---|
storage, disk, layout, error, runtime, cluster, rpc |
Compatibility spine for storage, disk topology, runtime handles, cluster control, and internode calls. | Keep until replacement contracts compile in downstream boundary files. |
bucket, config, tier, data_usage, capacity, notification, metrics, rebalance |
Domain and service facades still consumed through owner-local storage_api boundaries. |
Narrow one group at a time after explicit aliases or wrappers exist. |
set_disk, object, rio, bitrot, erasure, compression, cache, client, store_list |
Low-level object IO, reader, erasure, cache, and migration helper compatibility. | Keep stable while SetDisks remains the shared state carrier. |
admin, event, global |
Admin, event hook, and legacy global compatibility. | Do not widen; replace mutable/global access with runtime-source contracts first. |
External Consumer Boundaries
External rustfs_ecstore::api imports must stay in these local boundary files:
| Boundary file | Current facade families |
|---|---|
rustfs/src/storage/storage_api.rs |
Broad RustFS storage owner bridge for admin, bucket, capacity, client, compression, cluster, config, data usage, disk, error, event, global, layout, metrics, notification, rebalance, rio, rpc, set disk, storage, and tier. |
crates/scanner/src/storage_api.rs |
Scanner bridge for bucket lifecycle, replication, metadata, capacity, config, data usage, disk, error, runtime, set disk, storage, and tier. |
crates/obs/src/metrics/storage_api.rs |
Metrics bridge for bucket bandwidth, lifecycle, replication, quota, capacity, data usage, error, runtime, and storage. |
crates/iam/src/storage_api.rs |
IAM bridge for config, error, notification, runtime, and storage. |
crates/heal/src/heal/storage_api.rs |
Heal bridge for data usage, disk, error, runtime, and storage. |
crates/notify/src/storage_api.rs |
Notification bridge for config, runtime, and storage. |
crates/protocols/src/swift/storage_api.rs |
Swift bridge for bucket metadata, bucket metadata system, error, runtime, and storage. |
crates/s3select-api/src/storage_api.rs |
S3 Select bridge for error, runtime, set disk, and storage. |
crates/e2e_test/src/storage_api.rs |
E2E harness bridge for bucket targets, disk walking, and RPC helpers. |
crates/heal/tests/*/storage_api.rs, crates/scanner/tests/storage_api/mod.rs, fuzz/fuzz_targets/*_storage_api.rs |
Test and fuzz bridges for the same compatibility seams under test. |
New production imports outside these boundary files are migration drift. Add a local boundary or storage-api contract first, then route consumers through it.
Split Dependency Inventory
| Candidate | ECStore dependencies that block a crate split | Required owner contracts before movement |
|---|---|---|
| Lifecycle | Object API, ECStore, SetDisks, runtime sources/globals, bucket metadata/versioning/object lock/replication, disk, config, notification, audit, and tier services. |
LifecycleObjectStore, LifecycleMetadataStore, LifecycleRuntime, LifecycleReplicationSink, and LifecycleAuditSink. |
| Replication | Bucket target and metadata systems, bucket target client config, disk, object API, runtime sources, notification, and SetDisks lock timing. | ReplicationStorage, ReplicationMetadataStore, ReplicationRuntime, ReplicationEventSink, and ReplicationLifecycleBridge. |
| SetDisks | Shared disks, endpoints, format state, namespace locks, cache, and implementations for object IO, namespace locking, bucket, object, list, multipart, and heal operations. | Pure shard source, disk error, bitrot IO, namespace lock, metrics label, and file metadata contracts before any operation family moves. |
crates/ecstore/tests/ecstore_contract_compat_test.rs keeps compile-time
coverage for ECStore and SetDisks storage-api trait compatibility before
any facade shrink or operation-family movement.
Shrink Rules
- Do not remove a facade item until its downstream boundary has compile-time coverage or a documented replacement.
- Do not add direct
rustfs_ecstore::apiimports outside the boundary files listed above. - Do not split lifecycle or replication into crates while they depend on ECStore runtime state, queues, notification, audit, scanner, or SetDisks internals.
- Do not replace
SetDiskswith multiple runtime structs in one PR. Move one operation family only after contracts and focused tests exist. - Remove or narrow one facade group per PR so rollback preserves object IO, quorum, lifecycle/replication queues, scanner repair, notification/audit events, and metadata compatibility.
First PR Checklist
- inventory the facade group and all external boundary consumers;
- add explicit aliases or wrappers before deleting any broad passthrough;
- run
./scripts/check_architecture_migration_rules.sh; - run focused compile or tests for the touched owner boundary;
- keep runtime behavior unchanged unless the PR is explicitly a code-bearing follow-up with its own rollback plan.