From 658914ba276958c992f704f224357dc57b7316b7 Mon Sep 17 00:00:00 2001 From: conorbroderick Date: Thu, 4 Jan 2018 14:13:31 +0000 Subject: [PATCH] Fix dropped target list growing forever --- retrieval/scrape.go | 3 +++ retrieval/scrape_test.go | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/retrieval/scrape.go b/retrieval/scrape.go index 8d1173cd5..0d4a55338 100644 --- a/retrieval/scrape.go +++ b/retrieval/scrape.go @@ -250,6 +250,8 @@ func (sp *scrapePool) Sync(tgs []*targetgroup.Group) { start := time.Now() var all []*Target + sp.mtx.Lock() + sp.droppedTargets = []*Target{} for _, tg := range tgs { targets, err := targetsFromGroup(tg, sp.config) if err != nil { @@ -264,6 +266,7 @@ func (sp *scrapePool) Sync(tgs []*targetgroup.Group) { } } } + sp.mtx.Unlock() sp.sync(all) targetSyncIntervalLength.WithLabelValues(sp.config.JobName).Observe( diff --git a/retrieval/scrape_test.go b/retrieval/scrape_test.go index b3a0466ab..ed82afc37 100644 --- a/retrieval/scrape_test.go +++ b/retrieval/scrape_test.go @@ -33,6 +33,7 @@ import ( "github.com/stretchr/testify/require" "github.com/prometheus/prometheus/config" + "github.com/prometheus/prometheus/discovery/targetgroup" "github.com/prometheus/prometheus/pkg/labels" "github.com/prometheus/prometheus/pkg/timestamp" "github.com/prometheus/prometheus/pkg/value" @@ -58,6 +59,41 @@ func TestNewScrapePool(t *testing.T) { } } +func TestDroppedTargetsList(t *testing.T) { + var ( + app = &nopAppendable{} + cfg = &config.ScrapeConfig{ + JobName: "dropMe", + ScrapeInterval: model.Duration(1), + RelabelConfigs: []*config.RelabelConfig{ + { + Action: config.RelabelDrop, + Regex: mustNewRegexp("dropMe"), + SourceLabels: model.LabelNames{"job"}, + }, + }, + } + tgs = []*targetgroup.Group{ + { + Targets: []model.LabelSet{ + model.LabelSet{model.AddressLabel: "127.0.0.1:9090"}, + }, + }, + } + sp = newScrapePool(cfg, app, nil) + expectedLabelSetString = "{__address__=\"127.0.0.1:9090\", __metrics_path__=\"\", __scheme__=\"\", job=\"dropMe\"}" + expectedLength = 1 + ) + sp.Sync(tgs) + sp.Sync(tgs) + if len(sp.droppedTargets) != expectedLength { + t.Fatalf("Length of dropped targets exceeded expected length, expected %v, got %v", expectedLength, len(sp.droppedTargets)) + } + if sp.droppedTargets[0].DiscoveredLabels().String() != expectedLabelSetString { + t.Fatalf("Got %v, expected %v", sp.droppedTargets[0].DiscoveredLabels().String(), expectedLabelSetString) + } +} + type testLoop struct { startFunc func(interval, timeout time.Duration, errc chan<- error) stopFunc func()