Skip to content

Commit f93094f

Browse files
authored
internal/tsutil: add exponential falloff to retries when polling (#154)
* internal/tsutil: wait before polling again after an error * internal/tsutil: use exponential falloff for retries * internal/tsutil: reduce exponential falloff limit from an hour to 30 seconds
1 parent e250ece commit f93094f

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

internal/tsutil/poller.go

+21-2
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ func (p *Poller) Run(ctx context.Context) {
5959
if interval < 0 {
6060
interval = 5 * time.Second
6161
}
62+
retry := interval
6263

6364
check := time.NewTicker(interval)
6465
defer check.Stop()
@@ -70,7 +71,15 @@ func (p *Poller) Run(ctx context.Context) {
7071
return
7172
}
7273
slog.Error("get Tailscale status", "err", err)
73-
continue
74+
select {
75+
case <-ctx.Done():
76+
return
77+
case <-time.After(retry):
78+
if retry < 30*time.Second {
79+
retry *= 2
80+
}
81+
continue
82+
}
7483
}
7584

7685
prefs, err := Prefs(ctx)
@@ -79,9 +88,19 @@ func (p *Poller) Run(ctx context.Context) {
7988
return
8089
}
8190
slog.Error("get Tailscale prefs", "err", err)
82-
continue
91+
select {
92+
case <-ctx.Done():
93+
return
94+
case <-time.After(retry):
95+
if retry < 30*time.Second {
96+
retry *= 2
97+
}
98+
continue
99+
}
83100
}
84101

102+
retry = interval
103+
85104
var files []apitype.WaitingFile
86105
if status.Self.HasCap(tailcfg.CapabilityFileSharing) {
87106
files, err = WaitingFiles(ctx)

0 commit comments

Comments
 (0)