Incident Library
Applied filters OrganisationFly.ioClear allEvery case under the filters, with no sentence; newest first.
Suggested filters Search, and the values found in your words appear here.

Graph

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

Cases2 cases

1 to 2 of 2

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

  2. Symptoms

    On 28 May 2026, Fly.io's edges in US west coast regions began flapping, first mainly in SJC. Logs and metrics of fly-proxy, the userspace L4 and L7 load balancer on the edges, showed lazy loader latency of 500 ms to several seconds, so many new requests waited that long or longer, while proxy CPU usage and the inbound connection rate were not especially high.

    Root cause
    Component
    Contributing factor
    Detection

    Fly.io noticed flapping in its US west coast regions, and proxy logs and metrics showed high lazy loader latency.

    Remediation
    • Deployed the proxy in SJC with a temporary mitigation for one app with very large state in Corrosion, which helped only briefly
    • Shifted Anycast traffic from SJC to LAX
    • Lowered Airtime's bandwidth limit, which reduced softirq CPU usage and host load average
    • Bounced the proxy and hard-killed all proxy processes pending shutdown, which cleared the lazy loader problem
    Action items
    • Provision significantly more edge capacity
    • Fixed the bug that let multiple proxy instances coexist
    • Changed Airtime so that, for now, it applies a much stricter limit when it is not the expected active proxy instance
    • Fixed load shedding in the lazy loader so request latency has a reasonable upper bound
    • Shard the in-memory service catalog and move to finer-grained locking, tested with Antithesis
    • Rework Airtime to react to overall system load instead of only the proxy
    • Look into better monitoring for when the proxy is not in its expected configuration
Check your cluster for this

These 2 cases involve CDN and edge network and Host routes and routing rules. 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