in pkg/filesystem/file_watcher.go [69:105]
func (f *FileWatcher) Watch(ctx context.Context) error {
// Trigger initial file load
f.queue.Add(workItemKey)
var err error
f.watcher, err = fsnotify.NewWatcher()
if err != nil {
return err
}
go wait.UntilWithContext(ctx, f.runWorker, workerPollInterval)
// Start listening for events.
go func() {
for {
select {
case err := <-f.watcher.Errors:
klog.ErrorS(err, "Error from watcher")
case e := <-f.watcher.Events:
klog.V(3).InfoS("Event received", "event", e)
f.processEvent(e)
case <-ctx.Done():
klog.Info("context closed, stopping FileWatcher")
f.watcher.Close()
return
}
}
}()
dir := filepath.Dir(f.path)
err = f.watcher.Add(dir)
if err != nil {
klog.Fatal(err)
}
return nil
}