mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-24 05:04:05 -08:00
discovery/azure: more robust handling of go routines (#5106)
Signed-off-by: Simon Pasquier <spasquie@redhat.com>
This commit is contained in:
parent
a1f34bec2e
commit
68e4c211f2
|
@ -19,6 +19,7 @@ import (
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/Azure/azure-sdk-for-go/arm/compute"
|
"github.com/Azure/azure-sdk-for-go/arm/compute"
|
||||||
|
@ -324,9 +325,12 @@ func (d *Discovery) refresh() (tg *targetgroup.Group, err error) {
|
||||||
err error
|
err error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(len(machines))
|
||||||
ch := make(chan target, len(machines))
|
ch := make(chan target, len(machines))
|
||||||
for i, vm := range machines {
|
for i, vm := range machines {
|
||||||
go func(i int, vm virtualMachine) {
|
go func(i int, vm virtualMachine) {
|
||||||
|
defer wg.Done()
|
||||||
r, err := newAzureResourceFromID(vm.ID, d.logger)
|
r, err := newAzureResourceFromID(vm.ID, d.logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ch <- target{labelSet: nil, err: err}
|
ch <- target{labelSet: nil, err: err}
|
||||||
|
@ -374,7 +378,6 @@ func (d *Discovery) refresh() (tg *targetgroup.Group, err error) {
|
||||||
// is a cheap and easy way to determine if a machine is allocated or not.
|
// is a cheap and easy way to determine if a machine is allocated or not.
|
||||||
if networkInterface.Properties.Primary == nil {
|
if networkInterface.Properties.Primary == nil {
|
||||||
level.Debug(d.logger).Log("msg", "Skipping deallocated virtual machine", "machine", vm.Name)
|
level.Debug(d.logger).Log("msg", "Skipping deallocated virtual machine", "machine", vm.Name)
|
||||||
ch <- target{}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -395,15 +398,13 @@ func (d *Discovery) refresh() (tg *targetgroup.Group, err error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we get here we haven't sent anything to the channel.
|
|
||||||
// We need to send it something to release it.
|
|
||||||
ch <- target{}
|
|
||||||
}(i, vm)
|
}(i, vm)
|
||||||
}
|
}
|
||||||
|
|
||||||
for range machines {
|
wg.Wait()
|
||||||
tgt := <-ch
|
close(ch)
|
||||||
|
|
||||||
|
for tgt := range ch {
|
||||||
if tgt.err != nil {
|
if tgt.err != nil {
|
||||||
return nil, fmt.Errorf("unable to complete Azure service discovery: %s", err)
|
return nil, fmt.Errorf("unable to complete Azure service discovery: %s", err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue