From c89994104ddf015727daea3a79f50d72b9354604 Mon Sep 17 00:00:00 2001 From: Joel Speed Date: Wed, 18 Apr 2018 11:34:26 +0100 Subject: [PATCH 1/2] Fix string not called --- pkg/custom-provider/metric_namer.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/custom-provider/metric_namer.go b/pkg/custom-provider/metric_namer.go index c73b4e03..58711fd7 100644 --- a/pkg/custom-provider/metric_namer.go +++ b/pkg/custom-provider/metric_namer.go @@ -334,7 +334,7 @@ func (n *metricNamer) makeLabelForResource(resource schema.GroupResource) (pmode singularRes, err := n.mapper.ResourceSingularizer(resource.Resource) if err != nil { - return "", fmt.Errorf("unable to singularize resource %s: %v", resource.String, err) + return "", fmt.Errorf("unable to singularize resource %s: %v", resource.String(), err) } convResource := schema.GroupResource{ Group: groupNameSanitizer.Replace(resource.Group), From 44d755ae38db13a8074d4fa81fde39f1bc5f4816 Mon Sep 17 00:00:00 2001 From: Joel Speed Date: Wed, 18 Apr 2018 11:34:50 +0100 Subject: [PATCH 2/2] Fix asynchronous calls to map --- pkg/custom-provider/provider.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pkg/custom-provider/provider.go b/pkg/custom-provider/provider.go index b9ea5f1c..83625385 100644 --- a/pkg/custom-provider/provider.go +++ b/pkg/custom-provider/provider.go @@ -19,9 +19,11 @@ package provider import ( "context" "fmt" - "github.com/golang/glog" + "sync" "time" + "github.com/golang/glog" + "github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/provider" pmodel "github.com/prometheus/common/model" apierr "k8s.io/apimachinery/pkg/api/errors" @@ -287,6 +289,7 @@ func (l *cachingMetricsLister) updateMetrics() error { // don't do duplicate queries when it's just the matchers that change seriesCacheByQuery := make(map[prom.Selector][]prom.Series) + seriesCacheByQueryLock := sync.RWMutex{} // these can take a while on large clusters, so launch in parallel // and don't duplicate @@ -298,7 +301,9 @@ func (l *cachingMetricsLister) updateMetrics() error { errs <- nil continue } + seriesCacheByQueryLock.Lock() selectors[sel] = struct{}{} + seriesCacheByQueryLock.Unlock() go func() { series, err := l.promClient.Series(context.TODO(), pmodel.Interval{startTime, 0}, sel) if err != nil { @@ -306,7 +311,9 @@ func (l *cachingMetricsLister) updateMetrics() error { return } errs <- nil + seriesCacheByQueryLock.Lock() seriesCacheByQuery[sel] = series + seriesCacheByQueryLock.Unlock() }() }