Commit 568fc59
fix(mesh-conn): bump pion ICE Disconnected/Failed timeouts for relay paths
Pion's defaults (DisconnectedTimeout=5s + FailedTimeout=25s = 30s of no
inbound from the selected pair before the state callback fires Failed)
are too tight for the TURN-relay path. Brief jitter or coturn refresh-
window noise can accumulate a 30s consent-freshness gap, pion declares
Failed, our OnConnectionStateChange callback aborts the attempt, QUIC
returns context-canceled from its pumps, and runPeerLink re-handshakes
2-5s later. The link recovers every cycle but the cluster visibly
flaps Connected -> Disconnected -> Failed -> Checking -> Connected
roughly every couple of minutes on relay-only deployments.
Diagnosis:
- TestSteadyStateNoFlap (new) on host-loopback: 5 min observation, zero
flap events -> the outer state machine is fine, the bug lives in the
relay/TURN interaction.
- Live 6-CVM cluster with MESH_CONN_RELAY_ONLY=1 on the pre-fix code
for 15 min: did not deterministically reproduce the flap, but pion's
30s budget against an ~150ms-RTT relay path with two periodic refresh
cycles (perm at 120s, alloc at lifetime/2) is the obvious aggressive
setting.
Fix:
- Set DisconnectedTimeout=30s and FailedTimeout=60s on the ice.AgentConfig
in dialICE. The 60s Failed budget matches QUIC's MaxIdleTimeout, so
QUIC's idle-timeout in the pumps becomes the actual recovery trigger
in steady state, and pion's Failed becomes a redundant backstop. Real
peer death is still detected and recovered from within the QUIC budget.
- Failover RTO is unaffected: gated on Patroni leader-key TTL + Consul
gossip detection + Envoy xDS, none of which depend on mesh-conn's
per-peer-link death notice.
Verification:
- TestSingleHandshake: passes.
- TestAuthRaceConvergence: 50/50 trials.
- TestRestartConvergence: passes.
- TestSteadyStateNoFlap (new, configurable via STEADY_STATE_OBSERVE_SECONDS):
passes 50/50 at 30s observation each (25 min wall-clock total).
- Live 6-CVM relay-only cluster rolled to the fixed image: 15 min 47s
of post-stabilization observation across all 6 peers, ZERO
`ice state: Failed/Disconnected/Closed` events on any sidecar.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>1 parent b63896c commit 568fc59
3 files changed
Lines changed: 166 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
152 | 152 | | |
153 | 153 | | |
154 | 154 | | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
155 | 191 | | |
156 | 192 | | |
157 | 193 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1131 | 1131 | | |
1132 | 1132 | | |
1133 | 1133 | | |
| 1134 | + | |
| 1135 | + | |
| 1136 | + | |
| 1137 | + | |
| 1138 | + | |
| 1139 | + | |
| 1140 | + | |
| 1141 | + | |
| 1142 | + | |
| 1143 | + | |
| 1144 | + | |
| 1145 | + | |
| 1146 | + | |
| 1147 | + | |
| 1148 | + | |
| 1149 | + | |
| 1150 | + | |
| 1151 | + | |
| 1152 | + | |
| 1153 | + | |
| 1154 | + | |
| 1155 | + | |
| 1156 | + | |
| 1157 | + | |
| 1158 | + | |
| 1159 | + | |
| 1160 | + | |
| 1161 | + | |
| 1162 | + | |
| 1163 | + | |
| 1164 | + | |
| 1165 | + | |
| 1166 | + | |
| 1167 | + | |
| 1168 | + | |
| 1169 | + | |
| 1170 | + | |
| 1171 | + | |
| 1172 | + | |
| 1173 | + | |
| 1174 | + | |
| 1175 | + | |
1134 | 1176 | | |
1135 | | - | |
1136 | | - | |
1137 | | - | |
| 1177 | + | |
| 1178 | + | |
| 1179 | + | |
| 1180 | + | |
| 1181 | + | |
1138 | 1182 | | |
1139 | 1183 | | |
1140 | 1184 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
6 | 9 | | |
7 | 10 | | |
8 | 11 | | |
| |||
187 | 190 | | |
188 | 191 | | |
189 | 192 | | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
0 commit comments