diff --git a/CHANGELOG.md b/CHANGELOG.md index 406052d013..0c7f0d76b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,8 @@ Main (unreleased) - Fixed a bug in `import.git` which caused a `"non-fast-forward update"` error message. (@ptodev) +- `pyroscope.scrape` no longer tries to scrape endpoints which are not active targets anymore. (@wildum @mattdurham @dehaansa @ptodev) + ### Other changes - Small fix in UI stylesheet to fit more content into visible table area. (@defanator) diff --git a/internal/component/pyroscope/scrape/manager.go b/internal/component/pyroscope/scrape/manager.go index e6f469b481..f89a6bb5e6 100644 --- a/internal/component/pyroscope/scrape/manager.go +++ b/internal/component/pyroscope/scrape/manager.go @@ -112,6 +112,14 @@ func (m *Manager) reload() { wg.Done() }(m.targetsGroups[setName], groups) } + + for tgName, sp := range m.targetsGroups { + if _, ok := m.targetSets[tgName]; !ok { + sp.stop() + delete(m.targetsGroups, tgName) + } + } + wg.Wait() } diff --git a/internal/component/pyroscope/scrape/manager_test.go b/internal/component/pyroscope/scrape/manager_test.go index c72cc256e7..ef87515a83 100644 --- a/internal/component/pyroscope/scrape/manager_test.go +++ b/internal/component/pyroscope/scrape/manager_test.go @@ -11,9 +11,12 @@ import ( "github.com/prometheus/prometheus/discovery/targetgroup" "github.com/prometheus/prometheus/model/labels" "github.com/stretchr/testify/require" + "go.uber.org/goleak" ) func TestManager(t *testing.T) { + defer goleak.VerifyNone(t, goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start")) + reloadInterval = time.Millisecond m := NewManager(Options{}, pyroscope.AppendableFunc(func(ctx context.Context, labels labels.Labels, samples []*pyroscope.RawSample) error { @@ -62,6 +65,8 @@ func TestManager(t *testing.T) { return len(m.TargetsActive()["group2"]) == 10 }, time.Second, 10*time.Millisecond) + require.Equal(t, 1, len(m.targetsGroups)) + for _, ts := range m.targetsGroups { require.Equal(t, 1*time.Second, ts.config.ScrapeInterval) }