Rollback¶
Use this page when cutover fails before you delete embedded Deployments and PVCs, or when the 3scale operator 2.16 upgrade loops on preflight. Clone-friendly copy: docs/runbooks/en/07-rollback.md (Spanish: docs/runbooks/07-rollback.md).
If embedded resources are already gone, rollback means restore from backup (PVC snapshot, pg_dump, dump.rdb), not flipping externalComponents back to embedded pods that no longer exist.

Who owns what¶
| Namespace | Operator manages | You manage |
|---|---|---|
3scale |
system-app, APIcast, Zync, zync-database, system-storage |
Connection secrets (system-database, system-redis, backend-redis) |
3scale-db |
Nothing from the 3scale operator after externalComponents |
PostgreSQL 15, both Redis 7, PVCs, images, backups, NetworkPolicy |
See Why this repo for the full external ≠ off-cluster explanation and what the 3scale operator stops reconciling.
PostgreSQL restore fails¶
- Set
externalComponents.system.databaseback tofalseon the APIManager. - Reapply embedded PostgreSQL in the APIManager spec if needed:
spec.system.database.postgresql: {}. - Restore secret
system-databasefrom the backup you took (system-database-secret.yaml). - Scale up the 3scale operator and embedded
system-postgresql. - Validate Admin Portal and APIs against embedded data.
- Do not delete the new PostgreSQL PVC in
3scale-dbuntil embedded PostgreSQL is confirmed healthy.
Redis RDB empty or restore fails¶
- Set
externalComponents.system.redisandexternalComponents.backend.redisback tofalse. - Restore secrets
system-redisandbackend-redisfrom backup. - Scale embedded
backend-redisandsystem-redisback up on 3scale 2.15. - Validate portals and API traffic.
- Do not delete new Redis PVCs in
3scale-dbuntil embedded Redis is confirmed healthy.
If dump.rdb was empty on Git Bash, use docs/runbooks/02-bis-externalize-redis-windows.md (MSYS_NO_PATHCONV=1, oc exec + cat) and re-run Externalize Redis.
3scale operator 2.16 preflight loop¶
Symptoms: operator 2.16 installs but the instance upgrade never completes; version checks fail every ~10 minutes.
- Confirm PostgreSQL ≥ 15.0 and Redis ≥ 7.2 on the external pods (Upgrade operator to 2.16).
- Apply the PostgreSQL 15 grant if
system-app-prereportspermission denied for schema public— see Grant CREATE on schemapublic. - Delete the
system-app-preJob and let the operator recreate it. - Do not combine an OpenShift upgrade with the 3scale upgrade in the same window.
- If versions cannot be fixed in time, stay on channel
threescale-2.15until external databases meet preflight.
GitOps rollback trap (Redis)¶
If Argo CD or RHACM still points redis-config.path at kustomize/bases/redis-config-restore, selfHeal: true reverts persist mode after cutover. A pod restart can drop Redis data. Switch to redis-config-persist before you treat the migration as done. See GitOps pitfalls and Day 2 operations.