Browse Source

Merge pull request #2201 from prometheus/consul-race

discovery: terminate senders before closing channel
pull/2202/head
Julius Volz 8 years ago committed by GitHub
parent
commit
9b7e097a76
  1. 13
      retrieval/discovery/consul/consul.go

13
retrieval/discovery/consul/consul.go

@ -18,6 +18,7 @@ import (
"net"
"strconv"
"strings"
"sync"
"time"
consul "github.com/hashicorp/consul/api"
@ -132,7 +133,11 @@ func (cd *Discovery) shouldWatch(name string) bool {
// Run implements the TargetProvider interface.
func (cd *Discovery) Run(ctx context.Context, ch chan<- []*config.TargetGroup) {
defer close(ch)
var wg sync.WaitGroup
defer func() {
wg.Wait()
close(ch)
}()
// Watched services and their cancelation functions.
services := map[string]func(){}
@ -199,7 +204,11 @@ func (cd *Discovery) Run(ctx context.Context, ch chan<- []*config.TargetGroup) {
}
wctx, cancel := context.WithCancel(ctx)
go srv.watch(wctx, ch)
wg.Add(1)
go func() {
srv.watch(wctx, ch)
wg.Done()
}()
services[name] = cancel
}

Loading…
Cancel
Save