in exporter/collector/metrics.go [615:664]
func (me *MetricsExporter) watchWALFile(ctx context.Context) error {
me.goroutines.Add(1)
defer me.goroutines.Done()
walWatcher, err := fsnotify.NewWatcher()
if err != nil {
return err
}
err = walWatcher.Add(me.wal.path)
if err != nil {
return err
}
watchCh := make(chan error)
var wErr error
go func() {
defer func() {
watchCh <- wErr
close(watchCh)
walWatcher.Close()
}()
select {
case <-me.shutdownC:
return
case <-ctx.Done():
wErr = ctx.Err()
return
case event, ok := <-walWatcher.Events:
if !ok {
return
}
switch event.Op {
case fsnotify.Remove:
wErr = fmt.Errorf("WAL file deleted")
case fsnotify.Rename:
wErr = fmt.Errorf("WAL file renamed")
case fsnotify.Write:
wErr = nil
}
case watchErr, ok := <-walWatcher.Errors:
if ok {
wErr = watchErr
}
}
}()
err = <-watchCh
return err
}