diff --git a/storage/remote/read.go b/storage/remote/read.go index 8474a4236e..c25169391d 100644 --- a/storage/remote/read.go +++ b/storage/remote/read.go @@ -78,7 +78,7 @@ func (q *querier) Select(matchers ...*labels.Matcher) storage.SeriesSet { series := make([]storage.Series, 0, len(res)) for _, ts := range res { labels := labelPairsToLabels(ts.Labels) - removeLabels(labels, added) + removeLabels(&labels, added) series = append(series, &concreteSeries{ labels: labels, samples: ts.Samples, @@ -254,10 +254,10 @@ func (q *querier) addExternalLabels(matchers []*labels.Matcher) ([]*labels.Match return matchers, el } -func removeLabels(l labels.Labels, toDelete model.LabelSet) { - for i := 0; i < len(l); { - if _, ok := toDelete[model.LabelName(l[i].Name)]; ok { - l = l[:i+copy(l[i:], l[i+1:])] +func removeLabels(l *labels.Labels, toDelete model.LabelSet) { + for i := 0; i < len(*l); { + if _, ok := toDelete[model.LabelName((*l)[i].Name)]; ok { + *l = (*l)[:i+copy((*l)[i:], (*l)[i+1:])] } else { i++ } diff --git a/storage/remote/read_test.go b/storage/remote/read_test.go index cf50a0c5d3..1d4cc974e1 100644 --- a/storage/remote/read_test.go +++ b/storage/remote/read_test.go @@ -97,6 +97,29 @@ func TestAddExternalLabels(t *testing.T) { } } +func TestRemoveLabels(t *testing.T) { + tests := []struct { + in labels.Labels + out labels.Labels + toRemove model.LabelSet + }{ + { + toRemove: model.LabelSet{"foo": "bar"}, + in: labels.FromStrings("foo", "bar", "a", "b"), + out: labels.FromStrings("a", "b"), + }, + } + + for i, test := range tests { + in := test.in.Copy() + removeLabels(&in, test.toRemove) + + if !reflect.DeepEqual(in, test.out) { + t.Fatalf("%d. unexpected labels; want %v, got %v", i, test.out, in) + } + } +} + func TestConcreteSeriesSet(t *testing.T) { series1 := &concreteSeries{ labels: labels.FromStrings("foo", "bar"),