Merge pull request #1040 from prometheus/fixfilesd
Fix draining of file watcher events
This commit is contained in:
commit
bfdd474202
|
@ -160,6 +160,30 @@ func (fd *FileDiscovery) Run(ch chan<- *config.TargetGroup, done <-chan struct{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// stop shuts down the file watcher.
|
||||||
|
func (fd *FileDiscovery) stop() {
|
||||||
|
log.Debugf("Stopping file discovery for %s...", fd.paths)
|
||||||
|
|
||||||
|
done := make(chan struct{})
|
||||||
|
defer close(done)
|
||||||
|
|
||||||
|
// Closing the watcher will deadlock unless all events and errors are drained.
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-fd.watcher.Errors:
|
||||||
|
case <-fd.watcher.Events:
|
||||||
|
// Drain all events and errors.
|
||||||
|
case <-done:
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
fd.watcher.Close()
|
||||||
|
|
||||||
|
log.Debugf("File discovery for %s stopped.", fd.paths)
|
||||||
|
}
|
||||||
|
|
||||||
// refresh reads all files matching the discovery's patterns and sends the respective
|
// refresh reads all files matching the discovery's patterns and sends the respective
|
||||||
// updated target groups through the channel.
|
// updated target groups through the channel.
|
||||||
func (fd *FileDiscovery) refresh(ch chan<- *config.TargetGroup) {
|
func (fd *FileDiscovery) refresh(ch chan<- *config.TargetGroup) {
|
||||||
|
@ -196,27 +220,6 @@ func fileSource(filename string, i int) string {
|
||||||
return fmt.Sprintf("%s:%d", filename, i)
|
return fmt.Sprintf("%s:%d", filename, i)
|
||||||
}
|
}
|
||||||
|
|
||||||
// stop shuts down the file watcher.
|
|
||||||
func (fd *FileDiscovery) stop() {
|
|
||||||
log.Debugf("Stopping file discovery for %s...", fd.paths)
|
|
||||||
|
|
||||||
// Closing the watcher will deadlock unless all events and errors are drained.
|
|
||||||
go func() {
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case <-fd.watcher.Errors:
|
|
||||||
case <-fd.watcher.Events:
|
|
||||||
// Drain all events and errors.
|
|
||||||
default:
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
fd.watcher.Close()
|
|
||||||
|
|
||||||
log.Debugf("File discovery for %s stopped.", fd.paths)
|
|
||||||
}
|
|
||||||
|
|
||||||
// readFile reads a JSON or YAML list of targets groups from the file, depending on its
|
// readFile reads a JSON or YAML list of targets groups from the file, depending on its
|
||||||
// file extension. It returns full configuration target groups.
|
// file extension. It returns full configuration target groups.
|
||||||
func readFile(filename string) ([]*config.TargetGroup, error) {
|
func readFile(filename string) ([]*config.TargetGroup, error) {
|
||||||
|
|
Loading…
Reference in New Issue