Skip to content

Commit 6c36bd4

Browse files
committed
Enhance the performance of the frontend JSON codec
Signed-off-by: Xiaochao Dong (@damnever) <the.xcdong@gmail.com>
1 parent ffecf3b commit 6c36bd4

File tree

2 files changed

+6
-22
lines changed

2 files changed

+6
-22
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
* [ENHANCEMENT] Querier: Support chunks cache for parquet queryable. #6805
4242
* [ENHANCEMENT] Parquet Storage: Add some metrics for parquet blocks and converter. #6809
4343
* [ENHANCEMENT] Compactor: Optimize cleaner run time. #6815
44+
* [ENHANCEMENT] Query Frontend: Enhance the performance of the JSON codec. #6816
4445
* [BUGFIX] Ingester: Avoid error or early throttling when READONLY ingesters are present in the ring #6517
4546
* [BUGFIX] Ingester: Fix labelset data race condition. #6573
4647
* [BUGFIX] Compactor: Cleaner should not put deletion marker for blocks with no-compact marker. #6576

pkg/querier/tripperware/query.go

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"github.com/prometheus/prometheus/util/jsonutil"
2626
"github.com/weaveworks/common/httpgrpc"
2727

28+
_ "github.com/cortexproject/cortex/pkg/chunk" // Register jsoniter type: labels.Labels.
2829
"github.com/cortexproject/cortex/pkg/cortexpb"
2930
"github.com/cortexproject/cortex/pkg/util/limiter"
3031
"github.com/cortexproject/cortex/pkg/util/runutil"
@@ -113,12 +114,8 @@ func decodeSampleStream(ptr unsafe.Pointer, iter *jsoniter.Iterator) {
113114
for field := iter.ReadObject(); field != ""; field = iter.ReadObject() {
114115
switch field {
115116
case "metric":
116-
metricString := iter.ReadAny().ToString()
117117
lbls := labels.Labels{}
118-
if err := json.UnmarshalFromString(metricString, &lbls); err != nil {
119-
iter.ReportError("unmarshal SampleStream", err.Error())
120-
return
121-
}
118+
iter.ReadVal(&lbls)
122119
ss.Labels = cortexpb.FromLabelsToLabelAdapters(lbls)
123120
case "values":
124121
for iter.ReadArray() {
@@ -302,12 +299,7 @@ func encodeSampleStream(ptr unsafe.Pointer, stream *jsoniter.Stream) {
302299
stream.WriteObjectStart()
303300

304301
stream.WriteObjectField(`metric`)
305-
lbls, err := cortexpb.FromLabelAdaptersToLabels(ss.Labels).MarshalJSON()
306-
if err != nil {
307-
stream.Error = err
308-
return
309-
}
310-
stream.SetBuffer(append(stream.Buffer(), lbls...))
302+
stream.WriteVal(cortexpb.FromLabelAdaptersToLabels(ss.Labels))
311303

312304
if len(ss.Samples) > 0 {
313305
stream.WriteMore()
@@ -343,12 +335,8 @@ func decodeSample(ptr unsafe.Pointer, iter *jsoniter.Iterator) {
343335
for field := iter.ReadObject(); field != ""; field = iter.ReadObject() {
344336
switch field {
345337
case "metric":
346-
metricString := iter.ReadAny().ToString()
347338
lbls := labels.Labels{}
348-
if err := json.UnmarshalFromString(metricString, &lbls); err != nil {
349-
iter.ReportError("unmarshal Sample", err.Error())
350-
return
351-
}
339+
iter.ReadVal(&lbls)
352340
ss.Labels = cortexpb.FromLabelsToLabelAdapters(lbls)
353341
case "value":
354342
ss.Sample = &cortexpb.Sample{}
@@ -368,12 +356,7 @@ func encodeSample(ptr unsafe.Pointer, stream *jsoniter.Stream) {
368356
stream.WriteObjectStart()
369357

370358
stream.WriteObjectField(`metric`)
371-
lbls, err := cortexpb.FromLabelAdaptersToLabels(ss.Labels).MarshalJSON()
372-
if err != nil {
373-
stream.Error = err
374-
return
375-
}
376-
stream.SetBuffer(append(stream.Buffer(), lbls...))
359+
stream.WriteVal(cortexpb.FromLabelAdaptersToLabels(ss.Labels))
377360

378361
if ss.Sample != nil {
379362
stream.WriteMore()

0 commit comments

Comments
 (0)