Problem
The Read Replica phase of cloud_postgres_crud_lifecycle creates the replica seconds after the primary reaches running, but replica provisioning gates on the primary having a completed first backup. Two observed failure modes:
Not AWS capacity — create is accepted/rejected instantly, no capacity errors in logs.
Proposal
The test only needs to prove the API surface works, not that provisioning completes. Drop the wait for postgres read replica running step and keep:
- Create → assert response shape (
isPrimary=false, name, sane state)
- Replica visible in
postgres_service_get_list alongside primary (any state)
postgres_service_get on replica returns matching provider/region (any state)
- Delete replica → confirm gone → delete primary
Deleting a still-provisioning replica is proven safe: the failed PR #215 run's cleanup deleted the stuck replica in ~11s and the primary deleted cleanly after.
Callouts
- The non-empty
hostname/connection_string assertions currently ride on the running-state poll result. They test the provisioned instance, not the API — drop them, or keep as tolerant checks on the create/get response if populated early.
- Dropping the wait doesn't fix the first failure mode: create itself can still be rejected with the "no backups yet" 400. Wrap create in a retry that treats that specific 400 as retryable, otherwise the flake just moves to the create step.
Worth separately flagging to the cloud team that the API inconsistently accepts a replica create against a backup-less primary and leaves it non-running for 30+ min — the 400 rejection seems like the more correct behaviour.
Problem
The Read Replica phase of
cloud_postgres_crud_lifecyclecreates the replica seconds after the primary reachesrunning, but replica provisioning gates on the primary having a completed first backup. Two observed failure modes:400 BAD_REQUEST: Parent server is not ready for read replicas. There are no backups, yet.(main scheduled run 2026-06-29, PR Resolve OpenAPI drift: slow query patterns, Postgres metrics, RPE update (#224) #273 run 2026-06-26)runningpast the 1800s steady-state timeout (PR Unblock postgres_instance_config PATCH (#163) #215 run 2026-07-05)Not AWS capacity — create is accepted/rejected instantly, no capacity errors in logs.
Proposal
The test only needs to prove the API surface works, not that provisioning completes. Drop the
wait for postgres read replica runningstep and keep:isPrimary=false, name, sanestate)postgres_service_get_listalongside primary (any state)postgres_service_geton replica returns matching provider/region (any state)Deleting a still-provisioning replica is proven safe: the failed PR #215 run's cleanup deleted the stuck replica in ~11s and the primary deleted cleanly after.
Callouts
hostname/connection_stringassertions currently ride on the running-state poll result. They test the provisioned instance, not the API — drop them, or keep as tolerant checks on the create/get response if populated early.Worth separately flagging to the cloud team that the API inconsistently accepts a replica create against a backup-less primary and leaves it non-running for 30+ min — the 400 rejection seems like the more correct behaviour.