net/dns: don't timeout if inotify sends multiple events

This fixes a flaky test which has been occasionally timing out in CI.

In particular, this test times out if `watchFile` receives multiple
notifications from inotify before we cancel the test context. We block
processing the second notification, because we've stopped listening to
the `callbackDone` channel.

This patch changes the test so we only send on the first notification.

Testing this locally with `stress` confirms that the test is no longer
flaky.

Fixes #17172
Updates #14699

Signed-off-by: Alex Chan <alexc@tailscale.com>
pull/17177/head
Alex Chan 3 months ago committed by Alex Chan
parent ddc0cd7e1e
commit db0b9a361c

@ -25,8 +25,13 @@ func TestWatchFile(t *testing.T) {
var callbackCalled atomic.Bool
callbackDone := make(chan bool)
callback := func() {
callbackDone <- true
callbackCalled.Store(true)
// We only send to the channel once to avoid blocking if the
// callback is called multiple times -- this happens occasionally
// if inotify sends multiple events before we cancel the context.
if !callbackCalled.Load() {
callbackDone <- true
callbackCalled.Store(true)
}
}
var eg errgroup.Group

Loading…
Cancel
Save