Storage Tiering Service  ·  View 19 of 31  ·  5 · Runtime

A Hold and a Delete Arrive Mid-Move

Two of the requirement's hardest rules, a hold forbids demotion and a delete wins, enforced by one transaction on one shard.

Editable source SVG draw.io All views
Records management Policy service File service Catalogue Mover worker Release gate Destination tier 1. mark in-flight m-91 · epoch 9 2. PUT copy 3. hold H-204 · owner j.doe 4. restrictive · applies at once 5. hold scope + guard_epoch 10 6. commit m-91 if epoch 9 7. rejected · epoch is 10 8. tombstone object o-55 9. deleted · m-92 abandoned 10. commit m-92 11. rejected · tombstone 12. abandon m-91 · m-92 13. DELETE both destinations A Hold and a Delete Arrive While Objects Are Moving One epoch bump invalidates every uncommitted movement for the tenant. No object row is touched to place the hold. v 1.0 · owner Storage Platform Architecture · date 2026-09

Decisions

  • A new hold writes a scope row and increments the tenant's guard epoch in the same shard. Every movement that recorded the old epoch fails its commit, whatever it was moving. The mover does not need to know about holds at all (ADR-21).
  • A hold that restricts takes effect immediately. Removing or narrowing a hold needs two named approvers, because that is the only action that lets the platform move something it must not move (ADR-30).
  • A delete writes a tombstone. A commit against a tombstoned row fails, and the destination copy is cleaned up by the release gate, not by the mover.

Trade-off accepted

  • An epoch bump for one custodian's hold also aborts that tenant's unrelated in-flight movements. They are retried in the next batch. Wasted copies are cheap; a per-object hold check inside every commit across nine billion rows is not.

Numbers

  • Hold effective against new commits in under one second from arrival. Tombstones retained 35 days, which also bounds how long an orphan is quarantined before deletion.