Skip to content

Commit cc330e2

Browse files
authored
perf: Reduce allocations for JSON and logfmt parser (backport k270) (#19083)
Backport of #18637
1 parent 471246d commit cc330e2

12 files changed

+678
-240
lines changed

pkg/logql/log/fmt.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ func (lf *LabelsFormatter) Process(ts int64, l []byte, lbs *LabelsBuilder) ([]by
414414
if f.Rename {
415415
v, _, ok := lbs.GetWithCategory(f.Value)
416416
if ok {
417-
lbs.Set(ParsedLabel, f.Name, v)
417+
lbs.Set(ParsedLabel, unsafeGetBytes(f.Name), v)
418418
lbs.Del(f.Value)
419419
}
420420
continue
@@ -428,7 +428,7 @@ func (lf *LabelsFormatter) Process(ts int64, l []byte, lbs *LabelsBuilder) ([]by
428428
lbs.SetErrorDetails(err.Error())
429429
continue
430430
}
431-
lbs.Set(ParsedLabel, f.Name, lf.buf.String())
431+
lbs.Set(ParsedLabel, unsafeGetBytes(f.Name), lf.buf.Bytes())
432432
}
433433
return l, true
434434
}

pkg/logql/log/keep_labels.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,31 @@ func (kl *KeepLabels) Process(_ int64, line []byte, lbls *LabelsBuilder) ([]byte
1717
return line, true
1818
}
1919

20-
// TODO: Reuse buf?
21-
for _, lb := range lbls.UnsortedLabels(nil) {
22-
if isSpecialLabel(lb.Name) {
23-
continue
20+
del := make([]string, 0, 10)
21+
lbls.Range(func(name, value []byte) {
22+
if isSpecialLabel(unsafeGetString(name)) {
23+
return
2424
}
2525

2626
var keep bool
2727
for _, keepLabel := range kl.labels {
28-
if keepLabel.Matcher != nil && keepLabel.Matcher.Name == lb.Name && keepLabel.Matcher.Matches(lb.Value) {
28+
if keepLabel.Matcher != nil && keepLabel.Matcher.Name == unsafeGetString(name) && keepLabel.Matcher.Matches(unsafeGetString(value)) {
2929
keep = true
3030
break
3131
}
3232

33-
if keepLabel.Name == lb.Name {
33+
if keepLabel.Name == unsafeGetString(name) {
3434
keep = true
3535
break
3636
}
3737
}
3838

3939
if !keep {
40-
lbls.Del(lb.Name)
40+
del = append(del, unsafeGetString(name))
4141
}
42+
})
43+
for _, name := range del {
44+
lbls.Del(name)
4245
}
4346

4447
return line, true

pkg/logql/log/label_filter_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"reflect"
55
"strings"
66
"testing"
7+
78
"time"
89

910
"github.com/prometheus/prometheus/model/labels"

0 commit comments

Comments
 (0)