Skip to content

Commit

Permalink
test: First pass at unregistering metrics so that we can run multiple…
Browse files Browse the repository at this point in the history
… tests (#12927)
  • Loading branch information
paul1r authored May 9, 2024
1 parent 3a46d37 commit d16a3bf
Show file tree
Hide file tree
Showing 9 changed files with 54 additions and 9 deletions.
3 changes: 1 addition & 2 deletions pkg/compactor/deletion/delete_requests_client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ import (
"testing"
"time"

"github.com/prometheus/client_golang/prometheus"
"github.com/stretchr/testify/require"
)

func TestGetCacheGenNumberForUser(t *testing.T) {
deleteClientMetrics := NewDeleteRequestClientMetrics(prometheus.DefaultRegisterer)
deleteClientMetrics := NewDeleteRequestClientMetrics(nil)

t.Run("it requests results from the compactor client", func(t *testing.T) {
compactorClient := mockCompactorClient{
Expand Down
5 changes: 5 additions & 0 deletions pkg/compactor/deletion/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ type DeleteRequestClientMetrics struct {
deleteRequestsLookupsFailedTotal prometheus.Counter
}

func (m DeleteRequestClientMetrics) Unregister() {
prometheus.Unregister(m.deleteRequestsLookupsTotal)
prometheus.Unregister(m.deleteRequestsLookupsFailedTotal)
}

func NewDeleteRequestClientMetrics(r prometheus.Registerer) *DeleteRequestClientMetrics {
m := DeleteRequestClientMetrics{}

Expand Down
23 changes: 23 additions & 0 deletions pkg/loki/loki_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ import (
"testing"
"time"

"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/collectors"
"github.com/prometheus/client_golang/prometheus/collectors/version"

"github.com/grafana/loki/v3/pkg/util/constants"

"github.com/grafana/dskit/flagext"
"github.com/grafana/dskit/server"
"github.com/stretchr/testify/assert"
Expand Down Expand Up @@ -251,4 +257,21 @@ schema_config:
require.NoError(t, err)
require.Equal(t, string(bBytes), "abc")
assert.True(t, customHandlerInvoked)
unregisterLokiMetrics(loki)
}

func unregisterLokiMetrics(loki *Loki) {
loki.ClientMetrics.Unregister()
loki.deleteClientMetrics.Unregister()
prometheus.Unregister(version.NewCollector(constants.Loki))
prometheus.Unregister(collectors.NewGoCollector(
collectors.WithGoCollectorRuntimeMetrics(collectors.MetricsAll),
))
//TODO Update DSKit to have a method to unregister these metrics
prometheus.Unregister(loki.Metrics.TCPConnections)
prometheus.Unregister(loki.Metrics.TCPConnectionsLimit)
prometheus.Unregister(loki.Metrics.RequestDuration)
prometheus.Unregister(loki.Metrics.ReceivedMessageSize)
prometheus.Unregister(loki.Metrics.SentMessageSize)
prometheus.Unregister(loki.Metrics.InflightRequests)
}
3 changes: 1 addition & 2 deletions pkg/pattern/flush_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (
"github.com/grafana/dskit/ring"
"github.com/grafana/dskit/services"
"github.com/grafana/dskit/user"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/prometheus/model/labels"
"github.com/stretchr/testify/require"

Expand All @@ -23,7 +22,7 @@ import (
)

func TestSweepInstance(t *testing.T) {
ing, err := New(defaultIngesterTestConfig(t), "foo", prometheus.DefaultRegisterer, log.NewNopLogger())
ing, err := New(defaultIngesterTestConfig(t), "foo", nil, log.NewNopLogger())
require.NoError(t, err)
defer services.StopAndAwaitTerminated(context.Background(), ing) //nolint:errcheck
err = services.StartAndAwaitRunning(context.Background(), ing)
Expand Down
2 changes: 1 addition & 1 deletion pkg/scheduler/scheduler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func TestScheduler_setRunState(t *testing.T) {
// we make a Scheduler with the things required to avoid nil pointers
s := Scheduler{
log: util_log.Logger,
schedulerRunning: promauto.With(prometheus.DefaultRegisterer).NewGauge(prometheus.GaugeOpts{
schedulerRunning: promauto.With(nil).NewGauge(prometheus.GaugeOpts{
Name: "cortex_query_scheduler_running",
Help: "Value will be 1 if the scheduler is in the ReplicationSet and actively receiving/processing requests",
}),
Expand Down
16 changes: 12 additions & 4 deletions pkg/storage/chunk/client/congestion/congestion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@ import (

func TestZeroValueConstruction(t *testing.T) {
cfg := Config{}
ctrl := NewController(cfg, log.NewNopLogger(), NewMetrics(t.Name(), cfg))
m := NewMetrics(t.Name(), cfg)
ctrl := NewController(cfg, log.NewNopLogger(), m)

require.IsType(t, &NoopController{}, ctrl)
require.IsType(t, &NoopRetrier{}, ctrl.getRetrier())
require.IsType(t, &NoopHedger{}, ctrl.getHedger())
m.Unregister()
}

func TestAIMDConstruction(t *testing.T) {
Expand All @@ -22,11 +24,13 @@ func TestAIMDConstruction(t *testing.T) {
Strategy: "aimd",
},
}
ctrl := NewController(cfg, log.NewNopLogger(), NewMetrics(t.Name(), cfg))
m := NewMetrics(t.Name(), cfg)
ctrl := NewController(cfg, log.NewNopLogger(), m)

require.IsType(t, &AIMDController{}, ctrl)
require.IsType(t, &NoopRetrier{}, ctrl.getRetrier())
require.IsType(t, &NoopHedger{}, ctrl.getHedger())
m.Unregister()
}

func TestRetrierConstruction(t *testing.T) {
Expand All @@ -35,11 +39,13 @@ func TestRetrierConstruction(t *testing.T) {
Strategy: "limited",
},
}
ctrl := NewController(cfg, log.NewNopLogger(), NewMetrics(t.Name(), cfg))
m := NewMetrics(t.Name(), cfg)
ctrl := NewController(cfg, log.NewNopLogger(), m)

require.IsType(t, &NoopController{}, ctrl)
require.IsType(t, &LimitedRetrier{}, ctrl.getRetrier())
require.IsType(t, &NoopHedger{}, ctrl.getHedger())
m.Unregister()
}

func TestCombinedConstruction(t *testing.T) {
Expand All @@ -51,11 +57,13 @@ func TestCombinedConstruction(t *testing.T) {
Strategy: "limited",
},
}
ctrl := NewController(cfg, log.NewNopLogger(), NewMetrics(t.Name(), cfg))
m := NewMetrics(t.Name(), cfg)
ctrl := NewController(cfg, log.NewNopLogger(), m)

require.IsType(t, &AIMDController{}, ctrl)
require.IsType(t, &LimitedRetrier{}, ctrl.getRetrier())
require.IsType(t, &NoopHedger{}, ctrl.getHedger())
m.Unregister()
}

func TestHedgerConstruction(t *testing.T) {
Expand Down
5 changes: 5 additions & 0 deletions pkg/storage/chunk/client/congestion/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ func TestRequestNoopRetry(t *testing.T) {

require.EqualValues(t, 2, testutil.ToFloat64(metrics.requests))
require.EqualValues(t, 0, testutil.ToFloat64(metrics.retries))
metrics.Unregister()
}

func TestRequestZeroLimitedRetry(t *testing.T) {
Expand Down Expand Up @@ -74,6 +75,7 @@ func TestRequestZeroLimitedRetry(t *testing.T) {

require.EqualValues(t, 1, testutil.ToFloat64(metrics.requests))
require.EqualValues(t, 0, testutil.ToFloat64(metrics.retries))
metrics.Unregister()
}

func TestRequestLimitedRetry(t *testing.T) {
Expand Down Expand Up @@ -109,6 +111,7 @@ func TestRequestLimitedRetry(t *testing.T) {
require.EqualValues(t, 1, testutil.ToFloat64(metrics.retriesExceeded))
require.EqualValues(t, 2, testutil.ToFloat64(metrics.retries))
require.EqualValues(t, 4, testutil.ToFloat64(metrics.requests))
metrics.Unregister()
}

func TestRequestLimitedRetryNonRetryableErr(t *testing.T) {
Expand Down Expand Up @@ -139,6 +142,7 @@ func TestRequestLimitedRetryNonRetryableErr(t *testing.T) {
require.EqualValues(t, 0, testutil.ToFloat64(metrics.retries))
require.EqualValues(t, 1, testutil.ToFloat64(metrics.nonRetryableErrors))
require.EqualValues(t, 1, testutil.ToFloat64(metrics.requests))
metrics.Unregister()
}

func TestAIMDReducedThroughput(t *testing.T) {
Expand Down Expand Up @@ -212,6 +216,7 @@ func TestAIMDReducedThroughput(t *testing.T) {

// should have registered some congestion latency in stats
require.NotZero(t, statsCtx.Store().CongestionControlLatency)
metrics.Unregister()
}

func runAndMeasureRate(ctx context.Context, ctrl Controller, duration time.Duration) (float64, float64) {
Expand Down
5 changes: 5 additions & 0 deletions pkg/storage/chunk/client/congestion/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ type Metrics struct {

func (m Metrics) Unregister() {
prometheus.Unregister(m.currentLimit)
prometheus.Unregister(m.backoffSec)
prometheus.Unregister(m.requests)
prometheus.Unregister(m.retries)
prometheus.Unregister(m.nonRetryableErrors)
prometheus.Unregister(m.retriesExceeded)
}

// NewMetrics creates metrics to be used for monitoring congestion control.
Expand Down
1 change: 1 addition & 0 deletions tools/tsdb/migrate-versions/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,4 +141,5 @@ func TestMigrateTables(t *testing.T) {
}
})
}
clientMetrics.Unregister()
}

0 comments on commit d16a3bf

Please sign in to comment.