# RustFS Architecture Evolution This document set tracks the architecture migration from [`rustfs/backlog#660`](https://github.com/rustfs/backlog/issues/660). ## Baseline - Baseline branch: `upstream/main` - Baseline commit: `61f0dfbc40f748be313be84d834d8259cf3e19c9` - Baseline title: `fix(ecstore): invalidate wiped disk id cache (#3251)` - First migration PR type: `docs-only` ## Core Principle Cut wrong dependency directions with directories and contracts first, migrate global state in small steps next, and split crates only after boundaries are stable. Storage hot-path behavior must not drift during this migration. ## Architecture Documents - [`runtime-lifecycle.md`](runtime-lifecycle.md): runtime, AppContext, startup/readiness, and shutdown contracts. - [`readiness-matrix.md`](readiness-matrix.md): request-surface behavior, runtime dependency readiness, probe semantics, and preservation rules. - [`s3-tables-support-matrix.md`](s3-tables-support-matrix.md): supported, preview, reference-only, and not-claimed S3 Tables and Iceberg REST Catalog surfaces. - [`storage-control-data-plane.md`](storage-control-data-plane.md): boundaries between StorageCore, ECStore, ClusterControlPlane, and BackgroundControllers. - [`background-services-inventory.md`](background-services-inventory.md): current scanner, heal, lifecycle, replication, config reload, metrics, and shutdown surface before BackgroundController work. - [`background-controller-contract.md`](background-controller-contract.md): desired/current/status/reconcile vocabulary and lifecycle boundaries for future read-only BackgroundController work. - [`crate-boundaries.md`](crate-boundaries.md): PR types, crate direction, compatibility rules, and migration guardrails. - [`global-state-crate-split-plan.md`](global-state-crate-split-plan.md): late global-state cleanup, runtime-source boundaries, fallback removal rules, and crate-split evaluation criteria. - [`obs-ecstore-dependency-inventory.md`](obs-ecstore-dependency-inventory.md): observability-to-ECStore dependency inventory, classification, and extraction guardrails. - [`ecstore-config-consumer-inventory.md`](ecstore-config-consumer-inventory.md): current `ecstore::config::{Config, KV, KVS}` definitions, consumers, migration risks, and do-not-change contract. - [`ecstore-api-facade-inventory.md`](ecstore-api-facade-inventory.md): current `rustfs_ecstore::api` facade groups, external consumer boundaries, shrink rules, and split dependency inventory. - [`config-model-boundary-adr.md`](config-model-boundary-adr.md): target crate, module path, dependency rules, and verification gates for moving the pure server-config model. - [`compat-cleanup-register.md`](compat-cleanup-register.md): temporary compatibility code that must be removed later. ## Phase Order ```mermaid flowchart LR G["Phase 0: Baseline and guardrails"] CFG["Phase 1a: Config model contract"] SEC["Phase 1: Security governance"] API["Phase 2: Storage API contracts"] RT["Phase 3: Runtime and lifecycle"] EC["Phase 4: ECStore internal layout"] CP["Phase 5: Cluster control plane"] EXT["Phase 6: Extension plane"] GS["Phase 7: Global-state reduction"] CR["Crate split evaluation"] G --> CFG G --> SEC G --> API G --> RT CFG --> EXT API --> EC RT --> GS EC --> CP EXT --> CR GS --> CR ``` The first implementation sequence is conservative: 1. Record baseline and migration context. 2. Establish PR and compatibility rules. 3. Add dependency and loss-prevention checks in a separate `ci-gate` PR. 4. Inventory `ecstore::config::{Config, KV, KVS}` before moving any code. 5. Decide the config model boundary before extracting or migrating consumers.