fix targetGroup that disappear totally

Signed-off-by: Augustin Husson <husson.augustin@gmail.com>
This commit is contained in:
Augustin Husson 2018-09-25 19:05:02 +02:00
parent 3c0b130e5e
commit 9e6dc6f96c
1 changed files with 14 additions and 0 deletions

View File

@ -94,6 +94,7 @@ type discovery struct {
clientDatacenter string
tagSeparator string
logger log.Logger
oldSourceList map[string]bool
}
func (d *discovery) parseServiceNodes(resp *http.Response, name string) (*targetgroup.Group, error) {
@ -180,6 +181,8 @@ func (d *discovery) Run(ctx context.Context, ch chan<- []*targetgroup.Group) {
// list of targets simply because there may have been a timeout. If the service is actually
// gone as far as consul is concerned, that will be picked up during the next iteration of
// the outer loop.
newSourceList := make(map[string]bool)
for name := range srvs {
if name == "consul" {
continue
@ -195,7 +198,17 @@ func (d *discovery) Run(ctx context.Context, ch chan<- []*targetgroup.Group) {
break
}
tgs = append(tgs, tg)
newSourceList[tg.Source] = true
}
// when targetGroup disappear, send an update with empty targetList
for key := range d.oldSourceList {
if !newSourceList[key] {
tgs = append(tgs, &targetgroup.Group{
Source: key,
})
}
}
d.oldSourceList = newSourceList
if err == nil {
// We're returning all Consul services as a single targetgroup.
ch <- tgs
@ -216,6 +229,7 @@ func newDiscovery(conf sdConfig) (*discovery, error) {
refreshInterval: conf.RefreshInterval,
tagSeparator: conf.TagSeparator,
logger: logger,
oldSourceList: make(map[string]bool),
}
return cd, nil
}