refactor: remove ecstore operation compat facades (#3608)

This commit is contained in:
安正超
2026-06-19 17:01:12 +08:00
committed by GitHub
parent 132c8ae77d
commit 54ffbedbc8
42 changed files with 925 additions and 393 deletions
+115 -11
View File
@@ -5,19 +5,17 @@ Status values: `[ ]` not started, `[~]` in progress, `[x]` complete, `[!]` block
## Current Context
- Issue: [`rustfs/backlog#660`](https://github.com/rustfs/backlog/issues/660)
- Branch: `overtrue/arch-foreground-scanner-admission-snapshots`
- Baseline: `origin/main` after `rustfs/rustfs#3606`
(`7cb7aefc3bfd33cfaa46c718db15f00b0471fe88`).
- Branch: `overtrue/arch-ecstore-object-api-alias-prune`
- Baseline: stacked after `rustfs/rustfs#3614`
(`3740e65246aed8c8ee9685ed0234997c7d54e1b5`).
- PR type for this branch: `consumer-migration`
- Runtime behavior changes: none.
- Rust code changes: extend the RustFS workload admission registry from
repair/replication snapshots to foreground-read, scanner, and metadata owner
snapshots.
- CI/script changes: extend migration guard coverage for RustFS workload
admission provider implementations.
- Docs changes: add RustFS runtime owner provider notes to
[`workload-admission-contracts.md`](workload-admission-contracts.md) and
record the API-059/R-019 provider slice.
- Rust code changes: remove unused public `rustfs-storage-api` passthrough
aliases from ECStore `object_api` and bind the ECStore contract test directly
to the storage-api generic list/delete/walk contracts.
- CI/script changes: make the migration guard reject restoring ECStore
`object_api` storage-api passthrough aliases.
- Docs changes: record the API-066 ECStore object API alias prune slice.
## Phase 0 Tasks
@@ -214,6 +212,112 @@ Status values: `[ ]` not started, `[~]` in progress, `[x]` complete, `[!]` block
check, migration and layer guards, formatting, diff hygiene, risk scan, and
three-expert review.
- [x] `API-060` Remove heal and namespace-lock operation compatibility facades.
- Completed slice: remove the old ECStore `store_api::HealOperations` and
`store_api::NamespaceLocking` compatibility subtraits after ECStore storage
types already implemented the shared `rustfs_storage_api` contracts
directly.
- Acceptance: internal ECStore bounds and compile-time coverage use the
shared storage-api heal and namespace-lock contracts directly, while the
remaining object/list/multipart compatibility bindings stay unchanged for
their active internal consumers.
- Must preserve: heal operation behavior, namespace-lock acquisition,
replication resync locking, rebalance metadata locking, object I/O,
multipart, list, and storage hot paths.
- Verification: focused ECStore contract tests, focused ECStore library
check, migration and layer guards, formatting, diff hygiene, risk scan, and
three-expert review.
- [x] `API-061` Remove public ECStore object operation compatibility facades.
- Completed slice: remove the old public ECStore `store_api` object, list,
and multipart operation compatibility subtraits, and keep internal generic
bounds on crate-private storage-api contract constraints instead of public
downstream compatibility traits.
- Acceptance: `store_api` no longer exports public operation compatibility
traits, ECStore direct storage-api compile-time coverage includes object,
object-operation, list, multipart, namespace-lock, heal, and admin
contracts, and remaining public `store_api` exports are DTO/reader
compatibility paths only.
- Must preserve: object I/O, list/walk behavior, multipart behavior, config
persistence, tier config migration, rebalance metadata locking, lifecycle
journal handling, replication MRF/resync persistence, and downstream DTO
import compatibility.
- Verification: focused ECStore contract tests, focused ECStore library
check, migration and layer guards, formatting, diff hygiene, risk scan, and
three-expert review.
- [x] `API-062` Establish explicit ECStore object API boundary.
- Completed slice: add `rustfs_ecstore::object_api` as the explicit public
path for ECStore-owned object DTO and reader contracts, then migrate
RustFS, scanner, heal, IAM, Swift, S3 Select, notify, and ECStore
integration-test compatibility aliases away from the legacy public
`store_api` path.
- Acceptance: external compatibility boundary modules no longer reference
`rustfs_ecstore::store_api` for ECStore-owned object DTO and reader
aliases, while `store_api` remains available only as the old internal
implementation module pending final compatibility removal.
- Must preserve: object metadata shape, option defaults, reader/writer
behavior, Swift/scanner/heal/IAM/S3 Select/notify boundary semantics, and
all storage hot paths.
- Verification: focused ECStore/RustFS/downstream compile checks, migration
guard, formatting, diff hygiene, risk scan, and three-expert review.
- [x] `API-063` Make legacy ECStore store API module private.
- Completed slice: remove `rustfs_ecstore::store_api` from the public crate
module surface after external compatibility boundaries moved to
`rustfs_ecstore::object_api`.
- Acceptance: ECStore object DTO and reader compatibility remains available
through `object_api`, integration contract tests consume the new public
path, and migration rules reject restoring `pub mod store_api`.
- Must preserve: internal ECStore object DTO definitions, reader/writer
behavior, storage-api trait bindings, and downstream object/list/multipart
compile-time contracts.
- Verification: focused ECStore contract tests, migration guard, formatting,
diff hygiene, risk scan, and three-expert review.
- [x] `API-064` Retire the ECStore store API module name.
- Completed slice: move ECStore object DTO, reader, and option definitions
from the private `store_api` module into the public `object_api` module,
then migrate ECStore internal imports to `crate::object_api`.
- Acceptance: no ECStore `store_api` module file or directory remains, public
consumers keep using `rustfs_ecstore::object_api`, and migration rules
reject restoring the retired module path.
- Must preserve: object metadata shape, reader/writer behavior, storage-api
contract bindings, object/list/multipart behavior, and downstream public
object API compatibility.
- Verification: focused ECStore compile checks, migration guard, formatting,
diff hygiene, risk scan, and three-expert review.
- [x] `API-065` Use storage-api list contracts inside ECStore.
- Completed slice: migrate ECStore internal list response, walk options, and
walk result bindings to local aliases over the generic `rustfs-storage-api`
contracts, including replication worker trait bounds, while retaining
public `rustfs_ecstore::object_api` aliases for downstream compatibility.
- Acceptance: ECStore implementation modules no longer import list/walk
compatibility aliases from `crate::object_api`, and migration rules reject
reintroducing those internal imports.
- Must preserve: list response shape, walk result item shape, object metadata
shape, storage-api trait bindings, and downstream public object API
compatibility.
- Verification: focused ECStore compile checks, migration guard, formatting,
diff hygiene, risk scan, and three-expert review.
- [x] `API-066` Prune ECStore object API storage aliases.
- Completed slice: remove unused public storage-api passthrough aliases from
ECStore `object_api` for list responses, walk options, walk result items,
and delete-object DTOs, then bind the ECStore contract test directly to the
generic `rustfs-storage-api` contracts.
- Acceptance: ECStore `object_api` no longer exposes storage-api passthrough
aliases, the storage contract test still proves ECStore implements the
storage-api traits with the same associated concrete types, and migration
rules reject restoring the object_api passthrough aliases.
- Must preserve: ECStore-owned object metadata, object options, reader/writer
types, storage-api trait associated type bindings, list/delete/walk response
shapes, and runtime behavior.
- Verification: focused ECStore compile checks, storage contract test,
downstream compile checks, migration and layer guards, formatting, diff
hygiene, risk scan, full pre-commit, and three-expert review.
- [x] `TEST-PRTYPE-001` Check PR type enum consistency.
- Acceptance: `./scripts/check_architecture_migration_rules.sh` parses the
allowed PR types from [`crate-boundaries.md`](crate-boundaries.md) and fails