Simplify the logic as per the comments

Signed-off-by: Xiaochao Dong (@damnever) <the.xcdong@gmail.com>
This commit is contained in:
Xiaochao Dong (@damnever) 2023-12-25 15:14:25 +08:00
parent 1601b2a79e
commit b3b5c0022e
2 changed files with 29 additions and 71 deletions

View File

@ -269,13 +269,8 @@ func relabel(cfg *Config, lb *labels.Builder) (keep bool) {
case Replace:
// Fast path to add or delete label pair.
if val == "" && cfg.Regex == DefaultRelabelConfig.Regex &&
!containsNewLine(cfg.TargetLabel) &&
!varInRegexTemplate(cfg.TargetLabel) && !varInRegexTemplate(cfg.Replacement) {
if !model.LabelName(cfg.TargetLabel).IsValid() || cfg.Replacement == "" {
lb.Del(cfg.TargetLabel)
} else {
lb.Set(cfg.TargetLabel, cfg.Replacement)
}
lb.Set(cfg.TargetLabel, cfg.Replacement)
break
}
@ -332,7 +327,3 @@ func relabel(cfg *Config, lb *labels.Builder) (keep bool) {
func varInRegexTemplate(template string) bool {
return strings.Contains(template, "$")
}
func containsNewLine(s string) bool {
return strings.Contains(s, "\r\n") || strings.Contains(s, "\n")
}

View File

@ -15,7 +15,6 @@ package relabel
import (
"fmt"
"sort"
"testing"
"github.com/prometheus/common/model"
@ -838,6 +837,34 @@ func BenchmarkRelabel(b *testing.B) {
"__scrape_timeout__", "10s",
"job", "kubernetes-pods"),
},
{
name: "static label pair",
config: `
- replacement: wwwwww
target_label: wwwwww
- replacement: yyyyyyyyyyyy
target_label: xxxxxxxxx
- replacement: xxxxxxxxx
target_label: yyyyyyyyyyyy
- source_labels: ["something"]
target_label: with_source_labels
replacement: value
- replacement: dropped
target_label: ${0}
- replacement: ${0}
target_label: dropped`,
lbls: labels.FromStrings(
"abcdefg01", "hijklmn1",
"abcdefg02", "hijklmn2",
"abcdefg03", "hijklmn3",
"abcdefg04", "hijklmn4",
"abcdefg05", "hijklmn5",
"abcdefg06", "hijklmn6",
"abcdefg07", "hijklmn7",
"abcdefg08", "hijklmn8",
"job", "foo",
),
},
}
for i := range tests {
err := yaml.UnmarshalStrict([]byte(tests[i].config), &tests[i].cfgs)
@ -851,63 +878,3 @@ func BenchmarkRelabel(b *testing.B) {
})
}
}
func BenchmarkRelabel_ReplaceAddLabel(b *testing.B) {
cfgs := []*Config{}
for k, v := range map[string]string{
"wwwwww": "wwwwww",
"xxxxxxxxx": "xxxxxxxxx",
"yyyyyyyyyyyy": "yyyyyyyyyyyy",
"new\nline1": "dropped",
"new\r\nline2": "dropped",
"${0}": "dropped",
"dropped": "${0}",
} {
cfgs = append(cfgs, &Config{
Action: DefaultRelabelConfig.Action,
Separator: DefaultRelabelConfig.Separator,
Regex: DefaultRelabelConfig.Regex,
TargetLabel: k,
Replacement: v,
})
}
expectLset := labels.Labels{
labels.Label{Name: "abcdefg01", Value: "hijklmn1"},
labels.Label{Name: "abcdefg02", Value: "hijklmn2"},
labels.Label{Name: "abcdefg03", Value: "hijklmn3"},
labels.Label{Name: "abcdefg04", Value: "hijklmn4"},
labels.Label{Name: "abcdefg05", Value: "hijklmn5"},
labels.Label{Name: "abcdefg06", Value: "hijklmn6"},
labels.Label{Name: "abcdefg07", Value: "hijklmn7"},
labels.Label{Name: "abcdefg08", Value: "hijklmn8"},
labels.Label{Name: "abcdefg09", Value: "hijklmn9"},
labels.Label{Name: "abcdefg10", Value: "hijklmn10"},
labels.Label{Name: "abcdefg11", Value: "hijklmn11"},
labels.Label{Name: "abcdefg12", Value: "hijklmn12"},
labels.Label{Name: "abcdefg13", Value: "hijklmn13"},
labels.Label{Name: "wwwwww", Value: "wwwwww"},
labels.Label{Name: "xxxxxxxxx", Value: "xxxxxxxxx"},
labels.Label{Name: "yyyyyyyyyyyy", Value: "yyyyyyyyyyyy"},
}
sort.Sort(expectLset)
for i := 0; i < b.N; i++ {
lset := labels.Labels{
labels.Label{Name: "abcdefg01", Value: "hijklmn1"},
labels.Label{Name: "abcdefg02", Value: "hijklmn2"},
labels.Label{Name: "abcdefg03", Value: "hijklmn3"},
labels.Label{Name: "abcdefg04", Value: "hijklmn4"},
labels.Label{Name: "abcdefg05", Value: "hijklmn5"},
labels.Label{Name: "abcdefg06", Value: "hijklmn6"},
labels.Label{Name: "abcdefg07", Value: "hijklmn7"},
labels.Label{Name: "abcdefg08", Value: "hijklmn8"},
labels.Label{Name: "abcdefg09", Value: "hijklmn9"},
labels.Label{Name: "abcdefg10", Value: "hijklmn10"},
labels.Label{Name: "abcdefg11", Value: "hijklmn11"},
labels.Label{Name: "abcdefg12", Value: "hijklmn12"},
labels.Label{Name: "abcdefg13", Value: "hijklmn13"},
}
actual, _ := Process(lset, cfgs...)
require.Equal(b, actual, expectLset)
}
}