Skip to main content
Source baselineNereuscommit c820391dc1de·verified 2026-08-07·authority reader-facing-summary

Object GC state machine

Every physical Object identity has an authoritative Oxia root. The root records the object identity, lifecycle epoch, state, owner/domain proofs, deletion journal reference, and metadata version. It closes the race between a new reader/protection and a GC mark.

Lifecycle​

StateNew referencesRequired action
ACTIVEAllowed after create-protection -> reload-root -> same-epoch validationNormal reads, tasks, and protection
MARKEDFrozenDrain existing readers/tasks/owners; revert on any veto or drift
DELETINGForbiddenFollow the sealed journal and recover response loss
DELETEDForbiddenKeep audit root until delayed absence and reference proofs complete

Mark and drain​

GC marks only after collecting a complete reference snapshot. Once marked, it rejects new references and waits for existing reader leases, materialization tasks, owner sessions, and protection domains to drain. If a new authoritative reference, root/version drift, owner/domain change, or incomplete inventory appears, the root returns to ACTIVE or remains MARKED; it does not advance to deletion.

Sealed deletion journal​

After all eligibility checks pass, GC persists a journal containing exact metadata keys, protections, object identity, and operation order, then moves the root to DELETING:

  1. Retire generation/source metadata.
  2. Remove or retire protections.
  3. Revalidate root and journal.
  4. Execute Object DELETE.
  5. Resolve provider response loss by exact HEAD/absence checks.
  6. CAS the root to DELETED.

A new process can resume from the root and journal without the old JVM’s in-memory plan. If Object DELETE or the final CAS response is lost, reload the exact root and physical identity and recognize an already-applied operation rather than issuing an unrelated delete.

Deleted roots and late bytes​

DELETED does not immediately mean the root can be erased. Retirement requires two sufficiently separated exact absence observations, unchanged owner/domain proofs, retired references/manifests, and a root-last conditional delete. If bytes later appear under the old key, the old root does not revive. Inventory creates a new lifecycle root and subjects the bytes to orphan grace and full identity review.

Object listing is discovery only​

Object LIST can discover bytes that have no root, but it cannot prove that an object has no stream reference, that a generation is retired, or that DELETE is safe. A missing-root object first receives a root and orphan grace; only then can the ordinary GC state machine evaluate it.

Source anchors​