diff --git a/storage/local/codable/codable.go b/storage/local/codable/codable.go index f04d9ca544..37c273d1fd 100644 --- a/storage/local/codable/codable.go +++ b/storage/local/codable/codable.go @@ -38,8 +38,6 @@ import ( "sync" "github.com/prometheus/common/model" - - "github.com/prometheus/prometheus/storage/metric" ) // A byteReader is an io.ByteReader that also implements the vanilla io.Reader @@ -282,9 +280,9 @@ func (fps *Fingerprints) UnmarshalBinary(buf []byte) error { return nil } -// LabelPair is a metric.LabelPair that implements +// LabelPair is a model.LabelPair that implements // encoding.BinaryMarshaler and encoding.BinaryUnmarshaler. -type LabelPair metric.LabelPair +type LabelPair model.LabelPair // MarshalBinary implements encoding.BinaryMarshaler. func (lp LabelPair) MarshalBinary() ([]byte, error) { diff --git a/storage/local/index/index.go b/storage/local/index/index.go index b6b1e87c04..8f1985f041 100644 --- a/storage/local/index/index.go +++ b/storage/local/index/index.go @@ -23,7 +23,6 @@ import ( "github.com/prometheus/common/model" "github.com/prometheus/prometheus/storage/local/codable" - "github.com/prometheus/prometheus/storage/metric" ) const ( @@ -183,7 +182,7 @@ func DeleteLabelNameLabelValuesIndex(basePath string) error { // LabelPairFingerprintsMapping is an in-memory map of label pairs to // fingerprints. -type LabelPairFingerprintsMapping map[metric.LabelPair]codable.FingerprintSet +type LabelPairFingerprintsMapping map[model.LabelPair]codable.FingerprintSet // LabelPairFingerprintIndex is a KeyValueStore that maps existing label pairs // to the fingerprints of all metrics containing those label pairs. @@ -216,7 +215,7 @@ func (i *LabelPairFingerprintIndex) IndexBatch(m LabelPairFingerprintsMapping) e // returned. // // This method is goroutine-safe. -func (i *LabelPairFingerprintIndex) Lookup(p metric.LabelPair) (fps model.Fingerprints, ok bool, err error) { +func (i *LabelPairFingerprintIndex) Lookup(p model.LabelPair) (fps model.Fingerprints, ok bool, err error) { ok, err = i.Get((codable.LabelPair)(p), (*codable.Fingerprints)(&fps)) return } @@ -226,7 +225,7 @@ func (i *LabelPairFingerprintIndex) Lookup(p metric.LabelPair) (fps model.Finger // returned. // // This method is goroutine-safe. -func (i *LabelPairFingerprintIndex) LookupSet(p metric.LabelPair) (fps map[model.Fingerprint]struct{}, ok bool, err error) { +func (i *LabelPairFingerprintIndex) LookupSet(p model.LabelPair) (fps map[model.Fingerprint]struct{}, ok bool, err error) { ok, err = i.Get((codable.LabelPair)(p), (*codable.FingerprintSet)(&fps)) if fps == nil { fps = map[model.Fingerprint]struct{}{} diff --git a/storage/local/persistence.go b/storage/local/persistence.go index 9e191c0d84..8b3358e62b 100644 --- a/storage/local/persistence.go +++ b/storage/local/persistence.go @@ -34,7 +34,6 @@ import ( "github.com/prometheus/prometheus/storage/local/codable" "github.com/prometheus/prometheus/storage/local/index" - "github.com/prometheus/prometheus/storage/metric" "github.com/prometheus/prometheus/util/flock" ) @@ -334,7 +333,7 @@ func (p *persistence) setDirty(dirty bool) { // pair. This method is goroutine-safe but take into account that metrics queued // for indexing with IndexMetric might not have made it into the index // yet. (Same applies correspondingly to UnindexMetric.) -func (p *persistence) fingerprintsForLabelPair(lp metric.LabelPair) (model.Fingerprints, error) { +func (p *persistence) fingerprintsForLabelPair(lp model.LabelPair) (model.Fingerprints, error) { fps, _, err := p.labelPairToFingerprints.Lookup(lp) if err != nil { return nil, err @@ -1353,7 +1352,7 @@ loop: batchSize++ for ln, lv := range op.metric { - lp := metric.LabelPair{Name: ln, Value: lv} + lp := model.LabelPair{Name: ln, Value: lv} baseFPs, ok := pairToFPs[lp] if !ok { var err error diff --git a/storage/local/persistence_test.go b/storage/local/persistence_test.go index 0ef90dbb38..011c17d281 100644 --- a/storage/local/persistence_test.go +++ b/storage/local/persistence_test.go @@ -603,7 +603,7 @@ func testDropArchivedMetric(t *testing.T, encoding chunkEncoding) { p.indexMetric(2, m2) p.waitForIndexing() - outFPs, err := p.fingerprintsForLabelPair(metric.LabelPair{Name: "n1", Value: "v1"}) + outFPs, err := p.fingerprintsForLabelPair(model.LabelPair{Name: "n1", Value: "v1"}) if err != nil { t.Fatal(err) } @@ -611,7 +611,7 @@ func testDropArchivedMetric(t *testing.T, encoding chunkEncoding) { if !reflect.DeepEqual(outFPs, want) { t.Errorf("want %#v, got %#v", want, outFPs) } - outFPs, err = p.fingerprintsForLabelPair(metric.LabelPair{Name: "n2", Value: "v2"}) + outFPs, err = p.fingerprintsForLabelPair(model.LabelPair{Name: "n2", Value: "v2"}) if err != nil { t.Fatal(err) } @@ -635,7 +635,7 @@ func testDropArchivedMetric(t *testing.T, encoding chunkEncoding) { } p.waitForIndexing() - outFPs, err = p.fingerprintsForLabelPair(metric.LabelPair{Name: "n1", Value: "v1"}) + outFPs, err = p.fingerprintsForLabelPair(model.LabelPair{Name: "n1", Value: "v1"}) if err != nil { t.Fatal(err) } @@ -643,7 +643,7 @@ func testDropArchivedMetric(t *testing.T, encoding chunkEncoding) { if !reflect.DeepEqual(outFPs, want) { t.Errorf("want %#v, got %#v", want, outFPs) } - outFPs, err = p.fingerprintsForLabelPair(metric.LabelPair{Name: "n2", Value: "v2"}) + outFPs, err = p.fingerprintsForLabelPair(model.LabelPair{Name: "n2", Value: "v2"}) if err != nil { t.Fatal(err) } @@ -708,27 +708,27 @@ func testIndexing(t *testing.T, encoding chunkEncoding) { }, }, expectedLpToFps: index.LabelPairFingerprintsMapping{ - metric.LabelPair{ + model.LabelPair{ Name: model.MetricNameLabel, Value: "metric_0", }: codable.FingerprintSet{0: struct{}{}, 1: struct{}{}}, - metric.LabelPair{ + model.LabelPair{ Name: model.MetricNameLabel, Value: "metric_1", }: codable.FingerprintSet{2: struct{}{}}, - metric.LabelPair{ + model.LabelPair{ Name: "label_1", Value: "value_1", }: codable.FingerprintSet{0: struct{}{}}, - metric.LabelPair{ + model.LabelPair{ Name: "label_1", Value: "value_2", }: codable.FingerprintSet{2: struct{}{}}, - metric.LabelPair{ + model.LabelPair{ Name: "label_2", Value: "value_2", }: codable.FingerprintSet{1: struct{}{}}, - metric.LabelPair{ + model.LabelPair{ Name: "label_3", Value: "value_3", }: codable.FingerprintSet{1: struct{}{}}, @@ -769,39 +769,39 @@ func testIndexing(t *testing.T, encoding chunkEncoding) { }, }, expectedLpToFps: index.LabelPairFingerprintsMapping{ - metric.LabelPair{ + model.LabelPair{ Name: model.MetricNameLabel, Value: "metric_0", }: codable.FingerprintSet{0: struct{}{}, 1: struct{}{}, 3: struct{}{}}, - metric.LabelPair{ + model.LabelPair{ Name: model.MetricNameLabel, Value: "metric_1", }: codable.FingerprintSet{2: struct{}{}, 5: struct{}{}}, - metric.LabelPair{ + model.LabelPair{ Name: model.MetricNameLabel, Value: "metric_2", }: codable.FingerprintSet{4: struct{}{}}, - metric.LabelPair{ + model.LabelPair{ Name: "label_1", Value: "value_1", }: codable.FingerprintSet{0: struct{}{}}, - metric.LabelPair{ + model.LabelPair{ Name: "label_1", Value: "value_2", }: codable.FingerprintSet{2: struct{}{}}, - metric.LabelPair{ + model.LabelPair{ Name: "label_1", Value: "value_3", }: codable.FingerprintSet{3: struct{}{}, 5: struct{}{}}, - metric.LabelPair{ + model.LabelPair{ Name: "label_2", Value: "value_2", }: codable.FingerprintSet{1: struct{}{}, 4: struct{}{}}, - metric.LabelPair{ + model.LabelPair{ Name: "label_3", Value: "value_1", }: codable.FingerprintSet{4: struct{}{}}, - metric.LabelPair{ + model.LabelPair{ Name: "label_3", Value: "value_3", }: codable.FingerprintSet{1: struct{}{}}, diff --git a/storage/local/storage.go b/storage/local/storage.go index 014d5cee7d..fb3f6423d2 100644 --- a/storage/local/storage.go +++ b/storage/local/storage.go @@ -385,7 +385,7 @@ func (s *memorySeriesStorage) NewPreloader() Preloader { // fingerprintsForLabelPairs returns the set of fingerprints that have the given labels. // This does not work with empty label values. -func (s *memorySeriesStorage) fingerprintsForLabelPairs(pairs ...metric.LabelPair) map[model.Fingerprint]struct{} { +func (s *memorySeriesStorage) fingerprintsForLabelPairs(pairs ...model.LabelPair) map[model.Fingerprint]struct{} { var result map[model.Fingerprint]struct{} for _, pair := range pairs { intersection := map[model.Fingerprint]struct{}{} @@ -412,12 +412,12 @@ func (s *memorySeriesStorage) fingerprintsForLabelPairs(pairs ...metric.LabelPai // MetricsForLabelMatchers implements Storage. func (s *memorySeriesStorage) MetricsForLabelMatchers(matchers ...*metric.LabelMatcher) map[model.Fingerprint]model.COWMetric { var ( - equals []metric.LabelPair + equals []model.LabelPair filters []*metric.LabelMatcher ) for _, lm := range matchers { if lm.Type == metric.Equal && lm.Value != "" { - equals = append(equals, metric.LabelPair{ + equals = append(equals, model.LabelPair{ Name: lm.Name, Value: lm.Value, }) @@ -446,7 +446,7 @@ func (s *memorySeriesStorage) MetricsForLabelMatchers(matchers ...*metric.LabelM return nil } for _, v := range matches { - fps := s.fingerprintsForLabelPairs(metric.LabelPair{ + fps := s.fingerprintsForLabelPairs(model.LabelPair{ Name: matcher.Name, Value: v, }) diff --git a/storage/local/storage_test.go b/storage/local/storage_test.go index f4d4e0852e..8e600cccf1 100644 --- a/storage/local/storage_test.go +++ b/storage/local/storage_test.go @@ -222,33 +222,33 @@ func TestFingerprintsForLabels(t *testing.T) { storage.WaitForIndexing() var matcherTests = []struct { - pairs []metric.LabelPair + pairs []model.LabelPair expected model.Fingerprints }{ { - pairs: []metric.LabelPair{{"label1", "x"}}, + pairs: []model.LabelPair{{"label1", "x"}}, expected: fingerprints[:0], }, { - pairs: []metric.LabelPair{{"label1", "test_0"}}, + pairs: []model.LabelPair{{"label1", "test_0"}}, expected: fingerprints[:10], }, { - pairs: []metric.LabelPair{ + pairs: []model.LabelPair{ {"label1", "test_0"}, {"label1", "test_1"}, }, expected: fingerprints[:0], }, { - pairs: []metric.LabelPair{ + pairs: []model.LabelPair{ {"label1", "test_0"}, {"label2", "test_1"}, }, expected: fingerprints[5:10], }, { - pairs: []metric.LabelPair{ + pairs: []model.LabelPair{ {"label1", "test_1"}, {"label2", "test_2"}, }, @@ -391,7 +391,7 @@ func TestRetentionCutoff(t *testing.T) { s.WaitForIndexing() var fp model.Fingerprint - for f := range s.fingerprintsForLabelPairs(metric.LabelPair{Name: "job", Value: "test"}) { + for f := range s.fingerprintsForLabelPairs(model.LabelPair{Name: "job", Value: "test"}) { fp = f break } @@ -455,7 +455,7 @@ func TestDropMetrics(t *testing.T) { } s.WaitForIndexing() - fps := s.fingerprintsForLabelPairs(metric.LabelPair{Name: model.MetricNameLabel, Value: "test"}) + fps := s.fingerprintsForLabelPairs(model.LabelPair{Name: model.MetricNameLabel, Value: "test"}) if len(fps) != 2 { t.Fatalf("unexpected number of fingerprints: %d", len(fps)) } @@ -472,7 +472,7 @@ func TestDropMetrics(t *testing.T) { s.DropMetricsForFingerprints(fpList[0]) s.WaitForIndexing() - fps2 := s.fingerprintsForLabelPairs(metric.LabelPair{ + fps2 := s.fingerprintsForLabelPairs(model.LabelPair{ Name: model.MetricNameLabel, Value: "test", }) if len(fps2) != 1 { @@ -491,7 +491,7 @@ func TestDropMetrics(t *testing.T) { s.DropMetricsForFingerprints(fpList...) s.WaitForIndexing() - fps3 := s.fingerprintsForLabelPairs(metric.LabelPair{ + fps3 := s.fingerprintsForLabelPairs(model.LabelPair{ Name: model.MetricNameLabel, Value: "test", }) if len(fps3) != 0 { diff --git a/storage/metric/labelpair.go b/storage/metric/labelpair.go deleted file mode 100644 index 4babe6f4e3..0000000000 --- a/storage/metric/labelpair.go +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2013 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package metric - -import ( - "github.com/prometheus/common/model" -) - -// LabelPair pairs a name with a value. -type LabelPair struct { - Name model.LabelName - Value model.LabelValue -} - -// Equal returns true iff both the Name and the Value of this LabelPair and o -// are equal. -func (l *LabelPair) Equal(o *LabelPair) bool { - switch { - case l.Name != o.Name: - return false - case l.Value != o.Value: - return false - default: - return true - } -} - -// LabelPairs is a sortable slice of LabelPair pointers. It implements -// sort.Interface. -type LabelPairs []*LabelPair - -func (l LabelPairs) Len() int { - return len(l) -} - -func (l LabelPairs) Less(i, j int) bool { - switch { - case l[i].Name > l[j].Name: - return false - case l[i].Name < l[j].Name: - return true - case l[i].Value > l[j].Value: - return false - case l[i].Value < l[j].Value: - return true - default: - return false - } -} - -func (l LabelPairs) Swap(i, j int) { - l[i], l[j] = l[j], l[i] -} diff --git a/storage/metric/labelpair_test.go b/storage/metric/labelpair_test.go deleted file mode 100644 index 12b47235e7..0000000000 --- a/storage/metric/labelpair_test.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2013 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package metric - -import ( - "sort" - "testing" -) - -func testLabelPairs(t testing.TB) { - var scenarios = []struct { - in LabelPairs - out LabelPairs - }{ - { - in: LabelPairs{ - { - Name: "AAA", - Value: "aaa", - }, - }, - out: LabelPairs{ - { - Name: "AAA", - Value: "aaa", - }, - }, - }, - { - in: LabelPairs{ - { - Name: "aaa", - Value: "aaa", - }, - { - Name: "ZZZ", - Value: "aaa", - }, - }, - out: LabelPairs{ - { - Name: "ZZZ", - Value: "aaa", - }, - { - Name: "aaa", - Value: "aaa", - }, - }, - }, - } - - for i, scenario := range scenarios { - sort.Sort(scenario.in) - - for j, expected := range scenario.out { - if !expected.Equal(scenario.in[j]) { - t.Errorf("%d.%d expected %s, got %s", i, j, expected, scenario.in[j]) - } - } - } -} - -func TestLabelPairs(t *testing.T) { - testLabelPairs(t) -} - -func BenchmarkLabelPairs(b *testing.B) { - for i := 0; i < b.N; i++ { - testLabelPairs(b) - } -}