You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A single degraded replica in the coroot-db observability database silently blocked every
platform PR from merging for ~4 hours today, and degraded prod HA. The failure is systemic, not a
one-off.
The chain:
A CNPG switchover left the demoted old primary (coroot-db-7) unable to rejoin: pg_rewind found
the servers diverged on timeline 8 and could not restore the WAL segment it needed from the archive.
CNPG retried pg_rewindforever — 4+ hours, zero restarts, no self-healing and no re-clone. The
pod stayed Running but never Ready, so the Cluster sat in Waiting for the instances to become active (2 of 3 ready).
The infrastructure Flux Kustomization health-checks that Cluster, so it failed with health check failed after 20m: timeout waiting for: [Cluster/observability/coroot-db].
The important part: the database was serving fine the whole time — primary healthy, one healthy
replica, ContinuousArchiving=True, LastBackupSucceeded=True. A non-critical, still-serving
observability database with one lagging replica took down the entire merge lane.
I unwedged prod by hand (deleted the diverged replica's PVC + pod so CNPG re-cloned it from the
primary; the cluster is back to 3/3 healthy and the merge queue is moving). That is a manual remedy,
not a fix.
Proposed direction
Two independent defects, either of which alone would have prevented this:
A degraded-but-serving observability DB must not gate the merge queue. Deploy health gating
should not hang for 20 minutes on a replica that has no bearing on whether the deploy is good.
Either scope the infrastructure health checks away from non-critical stateful replicas, or make
this class alert instead of block.
A replica that cannot pg_rewind should be re-cloned, not retried forever. Retrying a rewind
that can never succeed (the WAL segment is not in the archive and never will be) is an infinite
loop. Options: ensure WAL needed for rewind is retained (HA replication slots / WAL retention), or
detect the unrecoverable-rewind condition and re-bootstrap the instance.
Also worth noting for the runbook: this switchover was very likely triggered by the rolling Talos node
reboots performed during the GHCR-credential remediation earlier today. After a rolling node reboot,
stateful workloads must be verified re-converged — a reboot can leave a demoted primary permanently
stuck, and nothing alerts on it.
Rough size
M — (1) is a manifest/health-check scoping change; (2) is a CNPG configuration or operator-behaviour
question that may need an upstream conversation.
Problem
A single degraded replica in the
coroot-dbobservability database silently blocked everyplatform PR from merging for ~4 hours today, and degraded prod HA. The failure is systemic, not a
one-off.
The chain:
coroot-db-7) unable to rejoin:pg_rewindfoundthe servers diverged on timeline 8 and could not restore the WAL segment it needed from the archive.
pg_rewindforever — 4+ hours, zero restarts, no self-healing and no re-clone. Thepod stayed
Runningbut never Ready, so theClustersat inWaiting for the instances to become active(2 of 3 ready).infrastructureFlux Kustomization health-checks thatCluster, so it failed withhealth check failed after 20m: timeout waiting for: [Cluster/observability/coroot-db].🚀 Deploy to Prodtherefore failed in everymerge_grouprun, so every platform PR wasevicted from the merge queue (observed on fix(backstage): give the startup probe a real budget so it survives a restart #2636).
The important part: the database was serving fine the whole time — primary healthy, one healthy
replica,
ContinuousArchiving=True,LastBackupSucceeded=True. A non-critical, still-servingobservability database with one lagging replica took down the entire merge lane.
I unwedged prod by hand (deleted the diverged replica's PVC + pod so CNPG re-cloned it from the
primary; the cluster is back to 3/3 healthy and the merge queue is moving). That is a manual remedy,
not a fix.
Proposed direction
Two independent defects, either of which alone would have prevented this:
should not hang for 20 minutes on a replica that has no bearing on whether the deploy is good.
Either scope the
infrastructurehealth checks away from non-critical stateful replicas, or makethis class alert instead of block.
pg_rewindshould be re-cloned, not retried forever. Retrying a rewindthat can never succeed (the WAL segment is not in the archive and never will be) is an infinite
loop. Options: ensure WAL needed for rewind is retained (HA replication slots / WAL retention), or
detect the unrecoverable-rewind condition and re-bootstrap the instance.
Also worth noting for the runbook: this switchover was very likely triggered by the rolling Talos node
reboots performed during the GHCR-credential remediation earlier today. After a rolling node reboot,
stateful workloads must be verified re-converged — a reboot can leave a demoted primary permanently
stuck, and nothing alerts on it.
Rough size
M — (1) is a manifest/health-check scoping change; (2) is a CNPG configuration or operator-behaviour
question that may need an upstream conversation.