From 3029320ce65ecac1ab554b31c132fc9d4dcb419e Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Thu, 21 Jul 2022 16:41:20 +0000 Subject: [PATCH] storage/remote: in tests use labels.FromStrings And a few cases of `EmptyLabels()`. Replacing code which assumes the internal structure of `Labels`. Signed-off-by: Bryan Boreham --- storage/remote/codec_test.go | 7 +--- storage/remote/queue_manager_test.go | 59 +++++++++++----------------- storage/remote/read_handler_test.go | 16 ++------ storage/remote/read_test.go | 37 +++++------------ storage/remote/storage.go | 2 +- storage/remote/storage_test.go | 4 +- 6 files changed, 41 insertions(+), 84 deletions(-) diff --git a/storage/remote/codec_test.go b/storage/remote/codec_test.go index be52bd312e..f84a45b9df 100644 --- a/storage/remote/codec_test.go +++ b/storage/remote/codec_test.go @@ -173,12 +173,9 @@ func TestConcreteSeriesSet(t *testing.T) { } func TestConcreteSeriesClonesLabels(t *testing.T) { - lbls := labels.Labels{ - labels.Label{Name: "a", Value: "b"}, - labels.Label{Name: "c", Value: "d"}, - } + lbls := labels.FromStrings("a", "b", "c", "d") cs := concreteSeries{ - labels: labels.New(lbls...), + labels: lbls, } gotLabels := cs.Labels() diff --git a/storage/remote/queue_manager_test.go b/storage/remote/queue_manager_test.go index aec783c4db..1c0c2d8c87 100644 --- a/storage/remote/queue_manager_test.go +++ b/storage/remote/queue_manager_test.go @@ -149,7 +149,7 @@ func TestMetadataDelivery(t *testing.T) { mcfg := config.DefaultMetadataConfig metrics := newQueueManagerMetrics(nil, "", "") - m := NewQueueManager(metrics, nil, nil, nil, dir, newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, nil, nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) + m := NewQueueManager(metrics, nil, nil, nil, dir, newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, labels.EmptyLabels(), nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) m.Start() defer m.Stop() @@ -188,7 +188,7 @@ func TestSampleDeliveryTimeout(t *testing.T) { dir := t.TempDir() metrics := newQueueManagerMetrics(nil, "", "") - m := NewQueueManager(metrics, nil, nil, nil, dir, newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, nil, nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) + m := NewQueueManager(metrics, nil, nil, nil, dir, newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, labels.EmptyLabels(), nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) m.StoreSeries(series, 0) m.Start() defer m.Stop() @@ -217,7 +217,7 @@ func TestSampleDeliveryOrder(t *testing.T) { }) series = append(series, record.RefSeries{ Ref: chunks.HeadSeriesRef(i), - Labels: labels.Labels{labels.Label{Name: "__name__", Value: name}}, + Labels: labels.FromStrings("__name__", name), }) } @@ -230,7 +230,7 @@ func TestSampleDeliveryOrder(t *testing.T) { mcfg := config.DefaultMetadataConfig metrics := newQueueManagerMetrics(nil, "", "") - m := NewQueueManager(metrics, nil, nil, nil, dir, newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, nil, nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) + m := NewQueueManager(metrics, nil, nil, nil, dir, newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, labels.EmptyLabels(), nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) m.StoreSeries(series, 0) m.Start() @@ -250,7 +250,7 @@ func TestShutdown(t *testing.T) { mcfg := config.DefaultMetadataConfig metrics := newQueueManagerMetrics(nil, "", "") - m := NewQueueManager(metrics, nil, nil, nil, dir, newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, nil, nil, c, deadline, newPool(), newHighestTimestampMetric(), nil, false) + m := NewQueueManager(metrics, nil, nil, nil, dir, newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, labels.EmptyLabels(), nil, c, deadline, newPool(), newHighestTimestampMetric(), nil, false) n := 2 * config.DefaultQueueConfig.MaxSamplesPerSend samples, series := createTimeseries(n, n) m.StoreSeries(series, 0) @@ -288,11 +288,11 @@ func TestSeriesReset(t *testing.T) { cfg := config.DefaultQueueConfig mcfg := config.DefaultMetadataConfig metrics := newQueueManagerMetrics(nil, "", "") - m := NewQueueManager(metrics, nil, nil, nil, dir, newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, nil, nil, c, deadline, newPool(), newHighestTimestampMetric(), nil, false) + m := NewQueueManager(metrics, nil, nil, nil, dir, newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, labels.EmptyLabels(), nil, c, deadline, newPool(), newHighestTimestampMetric(), nil, false) for i := 0; i < numSegments; i++ { series := []record.RefSeries{} for j := 0; j < numSeries; j++ { - series = append(series, record.RefSeries{Ref: chunks.HeadSeriesRef((i * 100) + j), Labels: labels.Labels{{Name: "a", Value: "a"}}}) + series = append(series, record.RefSeries{Ref: chunks.HeadSeriesRef((i * 100) + j), Labels: labels.FromStrings("a", "a")}) } m.StoreSeries(series, i) } @@ -317,7 +317,7 @@ func TestReshard(t *testing.T) { dir := t.TempDir() metrics := newQueueManagerMetrics(nil, "", "") - m := NewQueueManager(metrics, nil, nil, nil, dir, newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, nil, nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) + m := NewQueueManager(metrics, nil, nil, nil, dir, newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, labels.EmptyLabels(), nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) m.StoreSeries(series, 0) m.Start() @@ -353,7 +353,7 @@ func TestReshardRaceWithStop(t *testing.T) { go func() { for { metrics := newQueueManagerMetrics(nil, "", "") - m = NewQueueManager(metrics, nil, nil, nil, "", newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, nil, nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) + m = NewQueueManager(metrics, nil, nil, nil, "", newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, labels.EmptyLabels(), nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) m.Start() h.Unlock() h.Lock() @@ -388,7 +388,7 @@ func TestReshardPartialBatch(t *testing.T) { cfg.BatchSendDeadline = model.Duration(batchSendDeadline) metrics := newQueueManagerMetrics(nil, "", "") - m := NewQueueManager(metrics, nil, nil, nil, t.TempDir(), newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, nil, nil, c, flushDeadline, newPool(), newHighestTimestampMetric(), nil, false) + m := NewQueueManager(metrics, nil, nil, nil, t.TempDir(), newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, labels.EmptyLabels(), nil, c, flushDeadline, newPool(), newHighestTimestampMetric(), nil, false) m.StoreSeries(series, 0) m.Start() @@ -433,7 +433,7 @@ func TestQueueFilledDeadlock(t *testing.T) { metrics := newQueueManagerMetrics(nil, "", "") - m := NewQueueManager(metrics, nil, nil, nil, t.TempDir(), newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, nil, nil, c, flushDeadline, newPool(), newHighestTimestampMetric(), nil, false) + m := NewQueueManager(metrics, nil, nil, nil, t.TempDir(), newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, labels.EmptyLabels(), nil, c, flushDeadline, newPool(), newHighestTimestampMetric(), nil, false) m.StoreSeries(series, 0) m.Start() defer m.Stop() @@ -460,20 +460,15 @@ func TestReleaseNoninternedString(t *testing.T) { mcfg := config.DefaultMetadataConfig metrics := newQueueManagerMetrics(nil, "", "") c := NewTestWriteClient() - m := NewQueueManager(metrics, nil, nil, nil, "", newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, nil, nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) + m := NewQueueManager(metrics, nil, nil, nil, "", newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, labels.EmptyLabels(), nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) m.Start() defer m.Stop() for i := 1; i < 1000; i++ { m.StoreSeries([]record.RefSeries{ { - Ref: chunks.HeadSeriesRef(i), - Labels: labels.Labels{ - labels.Label{ - Name: "asdf", - Value: fmt.Sprintf("%d", i), - }, - }, + Ref: chunks.HeadSeriesRef(i), + Labels: labels.FromStrings("asdf", fmt.Sprintf("%d", i)), }, }, 0) m.SeriesReset(1) @@ -512,7 +507,7 @@ func TestShouldReshard(t *testing.T) { for _, c := range cases { metrics := newQueueManagerMetrics(nil, "", "") client := NewTestWriteClient() - m := NewQueueManager(metrics, nil, nil, nil, "", newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, nil, nil, client, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) + m := NewQueueManager(metrics, nil, nil, nil, "", newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, labels.EmptyLabels(), nil, client, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) m.numShards = c.startingShards m.dataIn.incr(c.samplesIn) m.dataOut.incr(c.samplesOut) @@ -565,19 +560,14 @@ func createExemplars(numExemplars, numSeries int) ([]record.RefExemplar, []recor } series = append(series, record.RefSeries{ Ref: chunks.HeadSeriesRef(i), - Labels: labels.Labels{{Name: "__name__", Value: name}}, + Labels: labels.FromStrings("__name__", name), }) } return exemplars, series } func getSeriesNameFromRef(r record.RefSeries) string { - for _, l := range r.Labels { - if l.Name == "__name__" { - return l.Value - } - } - return "" + return r.Labels.Get("__name__") } type TestWriteClient struct { @@ -679,13 +669,8 @@ func (c *TestWriteClient) Store(_ context.Context, req []byte) error { count := 0 for _, ts := range reqProto.Timeseries { - var seriesName string labels := labelProtosToLabels(ts.Labels) - for _, label := range labels { - if label.Name == "__name__" { - seriesName = label.Value - } - } + seriesName := labels.Get("__name__") for _, sample := range ts.Samples { count++ c.receivedSamples[seriesName] = append(c.receivedSamples[seriesName], sample) @@ -791,7 +776,7 @@ func BenchmarkSampleSend(b *testing.B) { dir := b.TempDir() metrics := newQueueManagerMetrics(nil, "", "") - m := NewQueueManager(metrics, nil, nil, nil, dir, newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, nil, nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) + m := NewQueueManager(metrics, nil, nil, nil, dir, newEWMARate(ewmaWeight, shardUpdateDuration), cfg, mcfg, labels.EmptyLabels(), nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) m.StoreSeries(series, 0) // These should be received by the client. @@ -837,7 +822,7 @@ func BenchmarkStartup(b *testing.B) { c := NewTestBlockedWriteClient() m := NewQueueManager(metrics, nil, nil, logger, dir, newEWMARate(ewmaWeight, shardUpdateDuration), - cfg, mcfg, nil, nil, c, 1*time.Minute, newPool(), newHighestTimestampMetric(), nil, false) + cfg, mcfg, labels.EmptyLabels(), nil, c, 1*time.Minute, newPool(), newHighestTimestampMetric(), nil, false) m.watcher.SetStartTime(timestamp.Time(math.MaxInt64)) m.watcher.MaxSegment = segments[len(segments)-2] err := m.watcher.Run() @@ -913,7 +898,7 @@ func TestCalculateDesiredShards(t *testing.T) { metrics := newQueueManagerMetrics(nil, "", "") samplesIn := newEWMARate(ewmaWeight, shardUpdateDuration) - m := NewQueueManager(metrics, nil, nil, nil, dir, samplesIn, cfg, mcfg, nil, nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) + m := NewQueueManager(metrics, nil, nil, nil, dir, samplesIn, cfg, mcfg, labels.EmptyLabels(), nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) // Need to start the queue manager so the proper metrics are initialized. // However we can stop it right away since we don't need to do any actual @@ -990,7 +975,7 @@ func TestCalculateDesiredShardsDetail(t *testing.T) { metrics := newQueueManagerMetrics(nil, "", "") samplesIn := newEWMARate(ewmaWeight, shardUpdateDuration) - m := NewQueueManager(metrics, nil, nil, nil, dir, samplesIn, cfg, mcfg, nil, nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) + m := NewQueueManager(metrics, nil, nil, nil, dir, samplesIn, cfg, mcfg, labels.EmptyLabels(), nil, c, defaultFlushDeadline, newPool(), newHighestTimestampMetric(), nil, false) for _, tc := range []struct { name string diff --git a/storage/remote/read_handler_test.go b/storage/remote/read_handler_test.go index f3447c9188..03e4b706bf 100644 --- a/storage/remote/read_handler_test.go +++ b/storage/remote/read_handler_test.go @@ -46,12 +46,8 @@ func TestSampledReadEndpoint(t *testing.T) { h := NewReadHandler(nil, nil, suite.Storage(), func() config.Config { return config.Config{ GlobalConfig: config.GlobalConfig{ - ExternalLabels: labels.Labels{ - // We expect external labels to be added, with the source labels honored. - {Name: "b", Value: "c"}, - {Name: "baz", Value: "a"}, - {Name: "d", Value: "e"}, - }, + // We expect external labels to be added, with the source labels honored. + ExternalLabels: labels.FromStrings("b", "c", "baz", "a", "d", "e"), }, } }, 1e6, 1, 0) @@ -130,12 +126,8 @@ func TestStreamReadEndpoint(t *testing.T) { api := NewReadHandler(nil, nil, suite.Storage(), func() config.Config { return config.Config{ GlobalConfig: config.GlobalConfig{ - ExternalLabels: labels.Labels{ - // We expect external labels to be added, with the source labels honored. - {Name: "baz", Value: "a"}, - {Name: "b", Value: "c"}, - {Name: "d", Value: "e"}, - }, + // We expect external labels to be added, with the source labels honored. + ExternalLabels: labels.FromStrings("baz", "a", "b", "c", "d", "e"), }, } }, diff --git a/storage/remote/read_test.go b/storage/remote/read_test.go index 98c1abcf9c..e3f7f4dee9 100644 --- a/storage/remote/read_test.go +++ b/storage/remote/read_test.go @@ -122,10 +122,7 @@ func TestExternalLabelsQuerierAddExternalLabels(t *testing.T) { added: labels.Labels{}, }, { - el: labels.Labels{ - {Name: "dc", Value: "berlin-01"}, - {Name: "region", Value: "europe"}, - }, + el: labels.FromStrings("dc", "berlin-01", "region", "europe"), inMatchers: []*labels.Matcher{ labels.MustNewMatcher(labels.MatchEqual, "job", "api-server"), }, @@ -134,16 +131,10 @@ func TestExternalLabelsQuerierAddExternalLabels(t *testing.T) { labels.MustNewMatcher(labels.MatchEqual, "region", "europe"), labels.MustNewMatcher(labels.MatchEqual, "dc", "berlin-01"), }, - added: labels.Labels{ - {Name: "dc", Value: "berlin-01"}, - {Name: "region", Value: "europe"}, - }, + added: labels.FromStrings("dc", "berlin-01", "region", "europe"), }, { - el: labels.Labels{ - {Name: "dc", Value: "berlin-01"}, - {Name: "region", Value: "europe"}, - }, + el: labels.FromStrings("dc", "berlin-01", "region", "europe"), inMatchers: []*labels.Matcher{ labels.MustNewMatcher(labels.MatchEqual, "job", "api-server"), labels.MustNewMatcher(labels.MatchEqual, "dc", "munich-02"), @@ -153,9 +144,7 @@ func TestExternalLabelsQuerierAddExternalLabels(t *testing.T) { labels.MustNewMatcher(labels.MatchEqual, "region", "europe"), labels.MustNewMatcher(labels.MatchEqual, "dc", "munich-02"), }, - added: labels.Labels{ - {Name: "region", Value: "europe"}, - }, + added: labels.FromStrings("region", "europe"), }, } @@ -293,10 +282,8 @@ func TestSampleAndChunkQueryableClient(t *testing.T) { matchers: []*labels.Matcher{ labels.MustNewMatcher(labels.MatchNotEqual, "a", "something"), }, - readRecent: true, - externalLabels: labels.Labels{ - {Name: "region", Value: "europe"}, - }, + readRecent: true, + externalLabels: labels.FromStrings("region", "europe"), expectedQuery: &prompb.Query{ StartTimestampMs: 1, @@ -318,10 +305,8 @@ func TestSampleAndChunkQueryableClient(t *testing.T) { labels.MustNewMatcher(labels.MatchNotEqual, "a", "something"), labels.MustNewMatcher(labels.MatchEqual, "region", "europe"), }, - readRecent: true, - externalLabels: labels.Labels{ - {Name: "region", Value: "europe"}, - }, + readRecent: true, + externalLabels: labels.FromStrings("region", "europe"), expectedQuery: &prompb.Query{ StartTimestampMs: 1, @@ -343,10 +328,8 @@ func TestSampleAndChunkQueryableClient(t *testing.T) { labels.MustNewMatcher(labels.MatchNotEqual, "a", "something"), labels.MustNewMatcher(labels.MatchEqual, "region", "us"), }, - readRecent: true, - externalLabels: labels.Labels{ - {Name: "region", Value: "europe"}, - }, + readRecent: true, + externalLabels: labels.FromStrings("region", "europe"), expectedQuery: &prompb.Query{ StartTimestampMs: 1, diff --git a/storage/remote/storage.go b/storage/remote/storage.go index 4de015e739..88892e62e3 100644 --- a/storage/remote/storage.go +++ b/storage/remote/storage.go @@ -120,7 +120,7 @@ func (s *Storage) ApplyConfig(conf *config.Config) error { externalLabels := conf.GlobalConfig.ExternalLabels if !rrConf.FilterExternalLabels { - externalLabels = make(labels.Labels, 0) + externalLabels = labels.EmptyLabels() } queryables = append(queryables, NewSampleAndChunkQueryableClient( c, diff --git a/storage/remote/storage_test.go b/storage/remote/storage_test.go index 5723a6d0ca..8a741f7f56 100644 --- a/storage/remote/storage_test.go +++ b/storage/remote/storage_test.go @@ -79,7 +79,7 @@ func TestFilterExternalLabels(t *testing.T) { conf := &config.Config{ GlobalConfig: config.GlobalConfig{ - ExternalLabels: labels.Labels{labels.Label{Name: "foo", Value: "bar"}}, + ExternalLabels: labels.FromStrings("foo", "bar"), }, } require.NoError(t, s.ApplyConfig(conf)) @@ -104,7 +104,7 @@ func TestIgnoreExternalLabels(t *testing.T) { conf := &config.Config{ GlobalConfig: config.GlobalConfig{ - ExternalLabels: labels.Labels{labels.Label{Name: "foo", Value: "bar"}}, + ExternalLabels: labels.FromStrings("foo", "bar"), }, } require.NoError(t, s.ApplyConfig(conf))