What gray failure forbids
Why is a correct failure detector impossible, and which escapes remain?
What this article forbids
It forbids a correct failure detector. Not a good one, not a well-tuned one: a correct one, in an asynchronous system, as a matter of logic. Therefore every automated failover is a bet that can be wrong. That is why fencing exists: it makes a possibly-still-alive old leader harmless. The system must remain correct when the detector is wrong, because it will be wrong.
It forbids trusting self-reported health for anything that matters. And it forbids assuming that a green control plane means a working data plane: they are separate observations of separate quantities, and the whole failure mode is the case where they disagree.
Escapes and costs
| Escape | Buys | Paid in |
|---|---|---|
| Watchdog / suicide on missed deadline | Decidability: manufactured fail-stop | Capacity destroyed; false positives |
| Client-observed health, outlier ejection | Measures the quantity clients care about | Mixes server, network and client without cross-tabulation |
| Peer-relative outlier detection | Catches gray failure below absolute thresholds | Blind to correlated degradation; needs similar work across peers |
| Eviction caps / fail open on mass unhealthiness | Stops detector error from becoming a total outage | Knowingly serves from degraded hosts |
| Hedging | Random stragglers | Extra load; useless against deterministic ones |
| Data validation as detector | The only gray-failure detector in the data plane | Compute cost; maintained expectations that drift |