Bug fixes
- Cross-region gateway tombstone churn (#220). The gateway tombstone reaper is now scoped to the local zone, so one region no longer deletes another region's live gateway layout roles. Previously each region's reaper classified the other region's gateway roles as stale and removed them while the per-node controller kept re-adding them — endless layout churn that left the gateway
key_tableunsynced and S3 auth failing with403. - Gateway identity lost on upgrade (#221). Gateway nodes now keep a persistent metadata PVC and the operator adopts the existing claim instead of recreating it, so a gateway's Garage node identity survives operator/chart upgrades — no more orphaned layout roles.
- Cross-region per-ordinal dial parser (#218). The remote-gateway ordinal parser no longer hardcodes the
garage-gateway-prefix andAtois the pod suffix, so per-ordinal dialing works for arbitrarily named gateway nodes.
Hardening (v0.6.7 backlog, #219)
- A status-update conflict (HTTP 409) no longer clobbers the reconcile's computed Phase / Health / conditions — status is now assembled inside the retry closure.
- Buckets revoke key grants that were dropped from
spec.keyPermissionsinstead of leaving them dangling. - Storage bootstrap admin calls get per-call 5s timeouts (parity with the gateway path), so one unreachable node can't stall the reconcile.
- An auto scale-down that would drop live nodes below
replication.factoris now refused with aStorageScaleDownBlockedcondition rather than orphaning the layout role. - Factor migration tracks per-phase deadlines, so a slow phase can't silently consume the next phase's timeout budget.
503responses are classified and fast-requeued instead of treated as terminal errors.- Single-replica gateway tiers get a drainable PodDisruptionBudget (
maxUnavailable=1). - New
GatewayLayoutDegradedcondition surfaces operator-owned gateway nodes that are missing from the layout. - Bucket-side key-permission reconcile skips re-issuing unchanged grants (less CRDT churn).
Docs
- README validated against the shipped code — gateway topology, factor migration, and health conditions (#217).
Upgrade notes
- If you set
layoutManagement.autoApply: falseto work around the cross-region churn (#220), you can re-enable it once all regions are on v0.6.7 — the reaper no longer fights across regions. - The operator upgrade is non-disruptive: Garage pods and node identities are unaffected.