fix(tiering): gate remote version state writes - #5382
Conversation
|
CLA requirements are satisfied for this pull request. |
…e-transition-metadata # Conflicts: # crates/ecstore/src/set_disk/ops/object.rs
…/fix-1358-fleet-version-gate # Conflicts: # crates/ecstore/src/set_disk/ops/object.rs
…/fix-1358-fleet-version-gate
…n-metadata' into cxymds/fix-1358-fleet-version-gate
…n-metadata' into cxymds/fix-1358-fleet-version-gate
…n-metadata' into cxymds/fix-1358-fleet-version-gate
…e-transition-metadata
…n-metadata' into cxymds/fix-1358-fleet-version-gate
…n-metadata' into cxymds/fix-1358-fleet-version-gate
|
The synchronized branch exposed a Clippy-only layout failure: Commit Verification:
|
|
CI follow-up for head
The branch has been normally merged with current Post-merge local verification:
The PR remains Ready for review; the new CI run on the #5402 workflow is authoritative. |
Related Issues
Related to rustfs/backlog#1358.
Summary of Changes
KnownDisabled, matching the remote-tier invariant that an empty version means an unversioned tier bucket and must omitversionIdon GET/DELETE.nulland opaque version tokens.Verification
cargo fmt --all --checkgit diff --checkcargo test -p rustfs-config remote_version_state_gate_uses_stable_environment_names --lib -- --nocapturecargo test -p rustfs-ecstore transition_version_id_tests --lib -- --nocapturemake pre-commitThe branch was synchronized with current
mainafter #5374 merged. The merge resolution retainedempty -> KnownDisabled, the dual-flag gate, and its regression assertions. Full CI on the synchronized branch remains authoritative.Impact
This adds two default-off environment variables:
RUSTFS_TIER_REMOTE_VERSION_STATE_WRITEandRUSTFS_TIER_REMOTE_VERSION_STATE_FLEET_CONFIRMED. The second variable is an operator attestation, not automatic node capability discovery. Operators must upgrade every node that can read or write transitioned-object metadata before enabling both variables on writer nodes. To roll back, disable the local writer opt-in on every node before rolling binaries back. Incorrectly confirming a mixed-version fleet can expose old nodes to metadata they cannot interpret safely.Unversioned tier buckets continue to work without either flag. Exact UUID semantics remain compatible. Only suspended-null and opaque provider versions require both flags.
Additional Notes
This PR follows merged #5374. It deliberately adds no GET/DELETE hot-path probes and no per-object peer RPCs. Cluster snapshot and runtime capability views are observational, while the tier-mutation peer protocol covers configuration mutations rather than every node that may write object metadata; neither is a safe automatic fleet gate for this behavior.
High-risk adversarial review:
KnownDisabled, nil remains rejected, and gated states require both flags.