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>
This commit is contained in:
@@ -25,8 +25,13 @@ func TestWatchFile(t *testing.T) {
|
|||||||
var callbackCalled atomic.Bool
|
var callbackCalled atomic.Bool
|
||||||
callbackDone := make(chan bool)
|
callbackDone := make(chan bool)
|
||||||
callback := func() {
|
callback := func() {
|
||||||
callbackDone <- true
|
// We only send to the channel once to avoid blocking if the
|
||||||
callbackCalled.Store(true)
|
// 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
|
var eg errgroup.Group
|
||||||
|
|||||||
Reference in New Issue
Block a user