Repository navigation
Description
🤖 Generated by the Agentic Engineer
Problem and evidence
A database replica can remain Pending after it is scheduled to a worker that does not yet have the volume client. The current CloudNativePG controller does not repair that already-scheduled case, so incomplete database redundancy prevents the reviewed client-placement maintenance from starting. A fresh scoped read on 11 October confirmed the storage-client attachment failure, a healthy remaining primary, retained claims, and an absent second replica.
This is different from the historical checkpoint failure in #4662 and the telemetry identity issue in #4720. Neither explains this fresh attachment failure.
Proposed bounded recovery
Add a default-read-only, protected recovery for the affected metadata database. After the active deployment finishes, freshly verify exact primary, replica, worker and retained-storage identities. Temporarily prevent scheduling on only the worker missing the client, and submit a normal eviction only for an exact still-Pending non-primary replica. Use UID and resource-version preconditions, preserve default graceful termination and the existing disruption budgets, retain every claim and volume, and restore only the recovery's owned scheduling change on every exit.
The original placement repair in #4718 remains the durable fix. Its full-health maintenance gate must not be weakened. No live recovery may run before regression tests, exact-head review, CI and merge.
Acceptance
- Failed, missing, stale or incomplete observations authorize no write; a running or primary Pod is never evicted.
- Concurrent identity, scheduling, storage or source changes reject the conditional write without a forced fallback.
- Interrupted execution leaves a recoverable ownership record; cleanup restores only its own cordon and reports incomplete cleanup as failure.
- Production runs serialize with other deployment writers and use the reviewed current main revision.
- The primary and all original claim/volume identities remain unchanged; full redundancy is observed twice before declaring recovery.
- After fix(storage): stage safe volume-client maintenance #4719 and fix: allow volume clients on compute workers #4744 deploy, verify eligible-worker client registration and continued database health before fix(talos): stop the audit flood by selecting AppArmor correctly #4197 proceeds.
Priority: High. Audience: platform services and their operators. This resolves confirmed live redundancy loss and unblocks existing delivery; it is an incident-recovery WIP exception, not new feature scope. Effort: Medium, including failure-path tests, review, deployment and separated live verification.
Part of #2043.
Metadata
Metadata
Assignees
Labels
Type
Fields
Priority
Effort
Projects
- StatusShow more project fields✅ Done
Activity
devantler commentedon Oct 11, 2026
The active Talos rollout completed successfully in run 38129074956, and #4721 is merged. After that writer finished, separated OIDC readbacks showed Coroot, Umami and Wedding at 3/3 Ready and Backstage at 2/2, all with healthy continuous archiving. Coroot's healthy primary remained unchanged; its two replicas are now Running and Ready. Every current node is Ready and schedulable at the deployed Talos version, and the platform live-health helper reports OK.
No manual replica recovery was executed. The proposed recovery helper remains unpublished because its Pending-Pod precondition no longer exists. Closing this immediate incident as recovered, not as a shipped recovery feature. The permanent prevention remains #4718/#4744, behind the protected maintenance guard in #4719; #4197 still waits for that storage maintenance and restoration proof. Coroot's rolling warning, log and risk counters are not declared clean.