@@ -3,12 +3,12 @@ package client
33import (
44 "fmt"
55
6+ "github.com/cortexproject/cortex/pkg/cortexpb"
67 "github.com/prometheus/common/model"
78 "github.com/prometheus/prometheus/model/labels"
89 "github.com/prometheus/prometheus/storage"
910 "github.com/prometheus/prometheus/tsdb/chunkenc"
10-
11- "github.com/cortexproject/cortex/pkg/cortexpb"
11+ storecache "github.com/thanos-io/thanos/pkg/store/cache"
1212)
1313
1414// ToQueryRequest builds a QueryRequest proto.
@@ -26,8 +26,8 @@ func ToQueryRequest(from, to model.Time, matchers []*labels.Matcher) (*QueryRequ
2626}
2727
2828// 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 )
3131 if err != nil {
3232 return 0 , 0 , nil , err
3333 }
@@ -55,10 +55,10 @@ func ToExemplarQueryRequest(from, to model.Time, matchers ...[]*labels.Matcher)
5555}
5656
5757// 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 ) {
5959 var result [][]* labels.Matcher
6060 for _ , m := range req .Matchers {
61- matchers , err := FromLabelMatchers (m .Matchers )
61+ matchers , err := FromLabelMatchers (cache , m .Matchers )
6262 if err != nil {
6363 return 0 , 0 , nil , err
6464 }
@@ -175,10 +175,10 @@ func SeriesSetToQueryResponse(s storage.SeriesSet) (*QueryResponse, error) {
175175}
176176
177177// 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 ) {
179179 matchersSet := make ([][]* labels.Matcher , 0 , len (req .MatchersSet ))
180180 for _ , matchers := range req .MatchersSet {
181- matchers , err := FromLabelMatchers (matchers .Matchers )
181+ matchers , err := FromLabelMatchers (cache , matchers .Matchers )
182182 if err != nil {
183183 return 0 , 0 , 0 , nil , err
184184 }
@@ -206,12 +206,12 @@ func ToLabelValuesRequest(labelName model.LabelName, from, to model.Time, limit
206206}
207207
208208// 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 ) {
210210 var err error
211211 var matchers []* labels.Matcher
212212
213213 if req .Matchers != nil {
214- matchers , err = FromLabelMatchers (req .Matchers .Matchers )
214+ matchers , err = FromLabelMatchers (cache , req .Matchers .Matchers )
215215 if err != nil {
216216 return "" , 0 , 0 , 0 , nil , err
217217 }
@@ -236,12 +236,12 @@ func ToLabelNamesRequest(from, to model.Time, limit int, matchers []*labels.Matc
236236}
237237
238238// 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 ) {
240240 var err error
241241 var matchers []* labels.Matcher
242242
243243 if req .Matchers != nil {
244- matchers , err = FromLabelMatchers (req .Matchers .Matchers )
244+ matchers , err = FromLabelMatchers (cache , req .Matchers .Matchers )
245245 if err != nil {
246246 return 0 , 0 , 0 , nil , err
247247 }
@@ -275,27 +275,31 @@ func toLabelMatchers(matchers []*labels.Matcher) ([]*LabelMatcher, error) {
275275 return result , nil
276276}
277277
278- func FromLabelMatchers (matchers []* LabelMatcher ) ([]* labels.Matcher , error ) {
278+ func FromLabelMatchers (cache storecache. MatchersCache , matchers []* LabelMatcher ) ([]* labels.Matcher , error ) {
279279 result := make ([]* labels.Matcher , 0 , len (matchers ))
280280 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+
295298 if err != nil {
296299 return nil , err
297300 }
298- result = append (result , matcher )
301+
302+ result = append (result , m )
299303 }
300304 return result , nil
301305}
0 commit comments