Fix a bug that caused the services list to keep growing

This patch changes the code which looks up service and appends
them to the Exporter's list. It previously would create an
endless list and cause a memory leak.

Signed-off-by: Alex Ellis (OpenFaaS Ltd) <alexellis2@gmail.com>
This commit is contained in:
Alex Ellis (OpenFaaS Ltd)
2020-12-05 10:55:14 +00:00
committed by Alex Ellis
parent 7de17fdf9d
commit 9bbb25e3c7

View File

@ -92,8 +92,11 @@ func (e *Exporter) StartServiceWatcher(endpointURL url.URL, metricsOptions Metri
log.Println(err) log.Println(err)
} }
services := []types.FunctionStatus{}
// Providers like Docker Swarm for instance have no namespaces.
if len(namespaces) == 0 { if len(namespaces) == 0 {
services, err := e.getFunctions(endpointURL, e.FunctionNamespace) services, err = e.getFunctions(endpointURL, e.FunctionNamespace)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
continue continue
@ -101,15 +104,17 @@ func (e *Exporter) StartServiceWatcher(endpointURL url.URL, metricsOptions Metri
e.services = services e.services = services
} else { } else {
for _, namespace := range namespaces { for _, namespace := range namespaces {
services, err := e.getFunctions(endpointURL, namespace) nsServices, err := e.getFunctions(endpointURL, namespace)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
continue continue
} }
e.services = append(e.services, services...) services = append(services, nsServices...)
} }
} }
e.services = services
break break
case <-quit: case <-quit:
return return