agent: keep backing off on lines that stay down

The control layer keeps doubling after the first minute up to ten minutes, and the QUIC redial doubles after twelve short attempts up to five minutes, instead of retrying every minute or every five seconds forever.
This commit is contained in:
justme committed 2026-10-22 05:28:29 +08:00
1 parent e0376b5e33
commit 4c31a4a79e
4 files changed
+24 -3

No files matched your search

@@ -8,6 +8,8 @@ public sealed class QuicRedialBackoff
{
private static readonly TimeSpan[] s_delays = [TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2), TimeSpan.FromSeconds(3), TimeSpan.FromSeconds(5)];
private const int ShortAttempts = 12;
private int _attempt;
public int Attempts => _attempt;
@@ -15,6 +17,12 @@ public sealed class QuicRedialBackoff
public TimeSpan Next(Random? random = null)
{
TimeSpan delay = s_delays[Math.Min(_attempt, s_delays.Length - 1)];
if (_attempt >= ShortAttempts)
{
// 短间隔已经连续失败了这么多次:这条路径大概率是死的(对端不通、被丢弃),握手和日志都是白费,翻倍退避,最长五分钟
delay = TimeSpan.FromSeconds(Math.Min(300, 5 * (1 << Math.Min(_attempt - ShortAttempts + 1, 6))));
}
_attempt++;
return random is null ? delay : delay * (0.8 + (0.4 * random.NextDouble()));
}