Incident Library
  • Root cause
  • Component
  • Symptom
  • Contributing factor
  • Case

Cases4 cases

1 to 4 of 4

  1. 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
  2. Symptoms

    On 23 September 2026, private networking (6PN) stopped working for a subset of Fly.io machines. Fly.io mitigated it in about 10 minutes, and the problem came back briefly the following day.

    Trigger

    Fly.io changed its 6PN routing so that edges act as gateways for non-static peers. Every edge was then treated as a gateway and got a /80 route for its prefix in the Linux routing table, which overrode the per-machine routing for machines that had kept a reused host ID.

    Root cause
    Component
    Contributing factor
    Remediation
    • Deleted the bad /80 routes from the routing table on all affected hosts
    • Rolled back the changes to s6pnforwarderd, the daemon that manages 6PN routes
    • Shipped a fix that adds interactive peers only as /128 routes, which did not prevent a brief recurrence the next day
    • Changed routing to always look first for machines that carry a host's ID, whatever kind of host it is
    Action items
    • Give the machines used to test and alert on 6PN non-local 6PN addresses
    • Make host IDs in 6PN addresses carry no weight in routing decisions, for gateway peers as well as machines
    • Move new peers and machines across the board to a better model than the current hack kept for existing gateway peers
    Lessons

    Not everyone at Fly.io knew that a worker's host ID could be reused by a host that is not a worker, because host ID assignment was not well documented, and the gateways had not been touched for a long time, so the problem stayed hidden until edges became gateways. All existing 6PN checks used machines on their original host, so they could not catch any problem with host ID reuse or stable 6PN addresses; host IDs need to stop influencing 6PN routing in general for this kind of incident not to recur.

  3. Symptoms

    At about 16:38 UTC on 17 March 2025, internal alerts fired across multiple Linode data centers because various servers had been unreachable for an extended period. At the same time customers began reporting problems with several products.

    Trigger

    A release of Akamai Compute's internal backend API component was rolling out, and during the rollout the API gave inconsistent responses to the route servers.

    Root cause
    Component
    Contributing factor
    Detection

    Internal alerts fired across multiple data centers showing servers unreachable for an extended period, and customers reported problems with multiple products at the same time.

    Remediation
    • Restarted the route servers in all data centers in phases, starting with the most affected regions
    Action items
    • Hold backend API releases until there is a better way to make sure route data for route servers is contiguous
  4. Symptoms

    On 5 October 2023 in us-central1, newly created VMs waited a long time before their networking worked, and VMs that had been live migrated lost connectivity for a long time after the migration. Networking telemetry showed cross-region packet loss to and from us-central1 from 03:08 US/Pacific. Health check state of VMs reached load balancers late.

    Trigger

    A management plane behaviour change, meant to decouple the processing of API updates to Instance Groups and Network Endpoint Groups used as load balancer backends, was deployed in us-central1 after rolling out to several other regions without incident.

    Root cause
    Component
    Contributing factor
    Detection

    Engineers were alerted to slowness in the virtual network control plane in us-central1 at 21:45 US/Pacific on 4 October, before the packet loss started, and to controller failures from memory exhaustion at 02:11 on 5 October. Networking telemetry showed cross-region packet loss from 03:08.

    Remediation
    • Increased the memory allocated to the virtual network router controllers
    • Rolled back the management plane change in us-central1
    • Restarted by hand the routers that were still not accepting updates
    Action items
    • Alert proactively on memory risks and unexpected memory increases
    • Refactor the deployment configuration so engineers can reallocate memory much faster
    • Re-evaluate existing practices and add safety mechanisms for API reconciliation
    • Make management plane changes more visible across teams so the changes can be correlated faster
    • Adjust the deployment footprint so a regional API change is less likely to exhaust memory across the region at once
    • Optimise memory use in the traffic routers and their controllers
Check your cluster for this

These 4 cases involve Network control plane (SDN) and BGP routing. 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 cause1