@@ -3,12 +3,12 @@ package client
3
3
import (
4
4
"fmt"
5
5
6
+ "github.com/cortexproject/cortex/pkg/cortexpb"
6
7
"github.com/prometheus/common/model"
7
8
"github.com/prometheus/prometheus/model/labels"
8
9
"github.com/prometheus/prometheus/storage"
9
10
"github.com/prometheus/prometheus/tsdb/chunkenc"
10
-
11
- "github.com/cortexproject/cortex/pkg/cortexpb"
11
+ storecache "github.com/thanos-io/thanos/pkg/store/cache"
12
12
)
13
13
14
14
// ToQueryRequest builds a QueryRequest proto.
@@ -26,8 +26,8 @@ func ToQueryRequest(from, to model.Time, matchers []*labels.Matcher) (*QueryRequ
26
26
}
27
27
28
28
// FromQueryRequest unpacks a QueryRequest proto.
29
- func FromQueryRequest (req * QueryRequest ) (model.Time , model.Time , []* labels.Matcher , error ) {
30
- matchers , err := FromLabelMatchers (req .Matchers )
29
+ func FromQueryRequest (cache storecache. MatchersCache , req * QueryRequest ) (model.Time , model.Time , []* labels.Matcher , error ) {
30
+ matchers , err := FromLabelMatchers (cache , req .Matchers )
31
31
if err != nil {
32
32
return 0 , 0 , nil , err
33
33
}
@@ -55,10 +55,10 @@ func ToExemplarQueryRequest(from, to model.Time, matchers ...[]*labels.Matcher)
55
55
}
56
56
57
57
// FromExemplarQueryRequest unpacks a ExemplarQueryRequest proto.
58
- func FromExemplarQueryRequest (req * ExemplarQueryRequest ) (int64 , int64 , [][]* labels.Matcher , error ) {
58
+ func FromExemplarQueryRequest (cache storecache. MatchersCache , req * ExemplarQueryRequest ) (int64 , int64 , [][]* labels.Matcher , error ) {
59
59
var result [][]* labels.Matcher
60
60
for _ , m := range req .Matchers {
61
- matchers , err := FromLabelMatchers (m .Matchers )
61
+ matchers , err := FromLabelMatchers (cache , m .Matchers )
62
62
if err != nil {
63
63
return 0 , 0 , nil , err
64
64
}
@@ -175,10 +175,10 @@ func SeriesSetToQueryResponse(s storage.SeriesSet) (*QueryResponse, error) {
175
175
}
176
176
177
177
// FromMetricsForLabelMatchersRequest unpacks a MetricsForLabelMatchersRequest proto
178
- func FromMetricsForLabelMatchersRequest (req * MetricsForLabelMatchersRequest ) (model.Time , model.Time , int , [][]* labels.Matcher , error ) {
178
+ func FromMetricsForLabelMatchersRequest (cache storecache. MatchersCache , req * MetricsForLabelMatchersRequest ) (model.Time , model.Time , int , [][]* labels.Matcher , error ) {
179
179
matchersSet := make ([][]* labels.Matcher , 0 , len (req .MatchersSet ))
180
180
for _ , matchers := range req .MatchersSet {
181
- matchers , err := FromLabelMatchers (matchers .Matchers )
181
+ matchers , err := FromLabelMatchers (cache , matchers .Matchers )
182
182
if err != nil {
183
183
return 0 , 0 , 0 , nil , err
184
184
}
@@ -206,12 +206,12 @@ func ToLabelValuesRequest(labelName model.LabelName, from, to model.Time, limit
206
206
}
207
207
208
208
// FromLabelValuesRequest unpacks a LabelValuesRequest proto
209
- func FromLabelValuesRequest (req * LabelValuesRequest ) (string , int64 , int64 , int , []* labels.Matcher , error ) {
209
+ func FromLabelValuesRequest (cache storecache. MatchersCache , req * LabelValuesRequest ) (string , int64 , int64 , int , []* labels.Matcher , error ) {
210
210
var err error
211
211
var matchers []* labels.Matcher
212
212
213
213
if req .Matchers != nil {
214
- matchers , err = FromLabelMatchers (req .Matchers .Matchers )
214
+ matchers , err = FromLabelMatchers (cache , req .Matchers .Matchers )
215
215
if err != nil {
216
216
return "" , 0 , 0 , 0 , nil , err
217
217
}
@@ -236,12 +236,12 @@ func ToLabelNamesRequest(from, to model.Time, limit int, matchers []*labels.Matc
236
236
}
237
237
238
238
// FromLabelNamesRequest unpacks a LabelNamesRequest proto
239
- func FromLabelNamesRequest (req * LabelNamesRequest ) (int64 , int64 , int , []* labels.Matcher , error ) {
239
+ func FromLabelNamesRequest (cache storecache. MatchersCache , req * LabelNamesRequest ) (int64 , int64 , int , []* labels.Matcher , error ) {
240
240
var err error
241
241
var matchers []* labels.Matcher
242
242
243
243
if req .Matchers != nil {
244
- matchers , err = FromLabelMatchers (req .Matchers .Matchers )
244
+ matchers , err = FromLabelMatchers (cache , req .Matchers .Matchers )
245
245
if err != nil {
246
246
return 0 , 0 , 0 , nil , err
247
247
}
@@ -275,27 +275,31 @@ func toLabelMatchers(matchers []*labels.Matcher) ([]*LabelMatcher, error) {
275
275
return result , nil
276
276
}
277
277
278
- func FromLabelMatchers (matchers []* LabelMatcher ) ([]* labels.Matcher , error ) {
278
+ func FromLabelMatchers (cache storecache. MatchersCache , matchers []* LabelMatcher ) ([]* labels.Matcher , error ) {
279
279
result := make ([]* labels.Matcher , 0 , len (matchers ))
280
280
for _ , matcher := range matchers {
281
- var mtype labels.MatchType
282
- switch matcher .Type {
283
- case EQUAL :
284
- mtype = labels .MatchEqual
285
- case NOT_EQUAL :
286
- mtype = labels .MatchNotEqual
287
- case REGEX_MATCH :
288
- mtype = labels .MatchRegexp
289
- case REGEX_NO_MATCH :
290
- mtype = labels .MatchNotRegexp
291
- default :
292
- return nil , fmt .Errorf ("invalid matcher type" )
293
- }
294
- matcher , err := labels .NewMatcher (mtype , matcher .Name , matcher .Value )
281
+ m , err := cache .GetOrSet (matcher .String (), func () (* labels.Matcher , error ) {
282
+ var mtype labels.MatchType
283
+ switch matcher .Type {
284
+ case EQUAL :
285
+ mtype = labels .MatchEqual
286
+ case NOT_EQUAL :
287
+ mtype = labels .MatchNotEqual
288
+ case REGEX_MATCH :
289
+ mtype = labels .MatchRegexp
290
+ case REGEX_NO_MATCH :
291
+ mtype = labels .MatchNotRegexp
292
+ default :
293
+ return nil , fmt .Errorf ("invalid matcher type" )
294
+ }
295
+ return labels .NewMatcher (mtype , matcher .GetName (), matcher .GetValue ())
296
+ })
297
+
295
298
if err != nil {
296
299
return nil , err
297
300
}
298
- result = append (result , matcher )
301
+
302
+ result = append (result , m )
299
303
}
300
304
return result , nil
301
305
}
0 commit comments