Skip to content

Commit

Permalink
Drop selector filters
Browse files Browse the repository at this point in the history
  • Loading branch information
fpetkovski committed Oct 17, 2022
1 parent 2f1d347 commit c210d0f
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
15 changes: 12 additions & 3 deletions logicalplan/merge_selects.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,16 @@ func replaceMatchers(selectors matcherHeap, expr *parser.Expr) {
}
// All replacements are done on metrics name only,
// so we can drop the explicit metric name selector.
filters := dropMetricName(e.LabelMatchers)
filters := dropMatcher(labels.MetricName, e.LabelMatchers)

// Drop filters which are already present as matchers in the replacement selector.
for _, s := range replacement {
for _, f := range filters {
if s.Name == f.Name && s.Value == f.Value && s.Type == f.Type {
filters = dropMatcher(f.Name, filters)
}
}
}
e.LabelMatchers = replacement
*node = &FilteredSelector{
Filters: filters,
Expand All @@ -70,9 +79,9 @@ func replaceMatchers(selectors matcherHeap, expr *parser.Expr) {
})
}

func dropMetricName(originalMatchers []*labels.Matcher) []*labels.Matcher {
func dropMatcher(matcherName string, originalMatchers []*labels.Matcher) []*labels.Matcher {
for i, l := range originalMatchers {
if l.Name == labels.MetricName {
if l.Name == matcherName {
originalMatchers = append(originalMatchers[:i], originalMatchers[i+1:]...)
}
}
Expand Down
6 changes: 3 additions & 3 deletions logicalplan/plan_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ func TestDefaultOptimizers(t *testing.T) {
{
name: "common selectors",
expr: `sum(metric{a="b", c="d"}) / sum(metric{a="b"})`,
expected: `sum(filter([a="b" c="d"], metric{a="b"})) / sum(metric{a="b"})`,
expected: `sum(filter([c="d"], metric{a="b"})) / sum(metric{a="b"})`,
},
{
name: "common selectors with regex",
Expand All @@ -36,8 +36,8 @@ func TestDefaultOptimizers(t *testing.T) {
sum(metric_2{a="b", c="d"}) / sum(metric_2{a="b"})
`,
expected: `
sum(filter([a="b" c="d"], metric_1{a="b"})) / sum(metric_1{a="b"}) +
sum(filter([a="b" c="d"], metric_2{a="b"})) / sum(metric_2{a="b"})`,
sum(filter([c="d"], metric_1{a="b"})) / sum(metric_1{a="b"}) +
sum(filter([c="d"], metric_2{a="b"})) / sum(metric_2{a="b"})`,
},
{
name: "different selectors",
Expand Down

0 comments on commit c210d0f

Please sign in to comment.