Cases4 cases
1 to 4 of 4
IL-0356Every domain hosted on Railway returned HTTP 404 to new connections for five minutes because route lookups failedRailway2026- Symptoms
On 30 September 2026, between about 07:35 and 07:40 UTC, new connections to every domain hosted on Railway, both custom domains and *.up.railway.app domains, got HTTP 404 in all regions. Internal alerting paged the on-call team as soon as route lookups started to fail.
- Trigger
At 07:29 UTC an engineer merged a change to the routing control plane that contained a database schema update and a new version of the routing service. At about 07:35 the deployment system rolled the new routing service out to every region before the schema update had been applied.
- Root cause
- Component
- Contributing factor
- Detection
Internal alerting engaged the on-call response team as soon as route lookups began to fail at about 07:35 UTC.
- Remediation
- Let the CI system finish the schema update, after which the routing service's retried lookups succeeded and routing recovered without a rollback
- Action items
- Force the migration rollout to run in serial order and unify the deployment pipeline so deploy order and blast radius are checked before merge
- Block the routing service's blue/green rollout until the database schema matching its version is in place
- Add shard based rollouts per region to the distributed control plane to isolate impact
IL-0369Railway's backend API went down when a column migration waited on locks and replicas could not get database connectionsRailway2025- Symptoms
At 15:18 UTC on 9 December 2025, Railway's backend replicas became unhealthy and stopped serving traffic. Dashboard access, CLI operations, logins, the API and the processing of GitHub-based deployments were disrupted, while running deployments stayed online.
- Trigger
Engineers merged a database schema change with a data migration at 15:03 UTC, and the migration began applying at 15:17 UTC. It added a nullable column to a heavily used table of about 1 billion rows.
- Root cause
- Component
- Contributing factor
- Action items
- Increase database connections and reconfigure PgBouncer to work within those limits
- Fix the long-running query so it no longer causes row lock issues
IL-0315Railway's backend API went down when an index build locked a billion-row Postgres table and used up every connectionRailway2025- Symptoms
At 18:36 UTC on 28 October 2025, two minutes after a database change went live in production, Railway's internal monitoring alerted and paged the engineering team. The dashboard could not be opened, CLI operations that use the API, such as railway up, failed, GitHub-based deployments were delayed because webhook processing failed, and all Railway Public API operations were disrupted.
- Trigger
A routine schema change to the backend's Postgres database, introduced at 18:23 UTC and live in production at 18:34 UTC, that added a new column with an index without the CONCURRENTLY option.
- Root cause
- Component
- Contributing factor
- Detection
Internal monitoring alerts paged the engineering team at 18:36 UTC, and the incident was declared at 18:41 UTC.
- Remediation
- The index migration finished after about 30 minutes and released the table lock, and the queued operations and connection pools recovered
- Action items
- Enforce CONCURRENTLY for all index creation in CI and block pull requests that do not use it
- Adjust PgBouncer pool limits so they cannot overwhelm the Postgres instance's capacity
- Configure database user connection limits so administrative access stays possible during incidents
IL-0316Railway's control plane slowed and deployments stopped after a PgBouncer version jump used abnormal CPU and memoryRailway2025- Symptoms
At 11:48 UTC on 22 September 2025, minutes after Railway had resolved a dashboard outage, its control plane showed abnormal resource consumption and elevated API latency. A large backlog of deployments queued during the first outage had started all at once, and the control plane began returning elevated database errors.
- Trigger
After a dashboard outage caused by a schema change was fixed, a large backlog of queued deployments started at the same time and put the control plane and its database, behind a newly upgraded PgBouncer, under heavy load.
- Root cause
- Component
- Contributing factor
- Detection
Users reported at 11:05 UTC that the project canvas failed to load; the control plane's abnormal resource consumption and elevated API latency were seen at 11:48 UTC and opened as a new incident.
- Remediation
- Deployed a fix for the API failure caused by the schema change within 15 minutes
- Suspended deployments for non-Pro users so Pro users could deploy and the queue could drain
- Suspended all deployments, Pro included, for up to 20 minutes during peak instability
- Scaled up the control plane database's CPU, memory, connection limits and IOPS
- Rolled PgBouncer back to the previous stable version, which brought all metrics back to nominal
- Re-enabled deployments for all non-Pro users
- Fixed the edge case in which private networks and their endpoints were missing from the dashboard
- Action items
- Re-engineer parts of the control plane to be more resilient, moving large parts of its storage layer away from Postgres
- Add CI validation that keeps disruptive schema changes out of production and automated schema compatibility checks before backend deployments
- Monitor and alert on PgBouncer node CPU, memory and connection pool utilization
- Upgrade PgBouncer in phases, instance by instance, instead of everywhere at once
- Lessons
Railway believes that without the breaking schema change reaching production the cascade would not have happened, that monitoring PgBouncer's own CPU, memory and pool metrics would have shown the performance regression earlier and shortened recovery, and that upgrading PgBouncer instances one at a time would have exposed the version-specific problem before it reached every instance.
These 4 cases involve Database and Database proxy and connection pooler. kubegap audits a Kubernetes cluster for gaps like these, read-only, from Claude Code or Codex; its checks cite public reports like the ones in this library.
By root cause2
Faulty deployment3 cases
- Component
- Contributing factor
- Organisation
IL-0356Every domain hosted on Railway returned HTTP 404 to new connections for five minutes because route lookups failedRailway2026IL-0369Railway's backend API went down when a column migration waited on locks and replicas could not get database connectionsRailway2025IL-0315Railway's backend API went down when an index build locked a billion-row Postgres table and used up every connectionRailway2025
Breaking change in an upgrade1 case
- Contributing factor
- Organisation