🤖 Fáith parks a failed HTTP/3 origin in the failed cache for a fixed upgradeFailedTtl (default 300s). Chrome instead marks QUIC broken with a doubling cooldown — 5 minutes, then 10, 20, 40… capped, and reset by any success. An origin whose UDP path is permanently blocked stops being re-tried every five minutes forever; one with a transient blip still recovers quickly.
This is a small change on top of the existing failed cache: keep a consecutive-failure count per origin, compute the TTL as failed_ttl << count (capped at, say, a day), clear the count on confirm_h3.
It pairs particularly well with the eager-probe design (#45): retries are already free of foreground cost there, so the only thing backoff saves is background probe traffic against origins that are never coming back — which is exactly what it's good at.
🤖 Fáith parks a failed HTTP/3 origin in the
failedcache for a fixedupgradeFailedTtl(default 300s). Chrome instead marks QUIC broken with a doubling cooldown — 5 minutes, then 10, 20, 40… capped, and reset by any success. An origin whose UDP path is permanently blocked stops being re-tried every five minutes forever; one with a transient blip still recovers quickly.This is a small change on top of the existing
failedcache: keep a consecutive-failure count per origin, compute the TTL asfailed_ttl << count(capped at, say, a day), clear the count onconfirm_h3.It pairs particularly well with the eager-probe design (#45): retries are already free of foreground cost there, so the only thing backoff saves is background probe traffic against origins that are never coming back — which is exactly what it's good at.