From 38fc55976ee38a141b1decda01fbc35f02879d62 Mon Sep 17 00:00:00 2001 From: faceair Date: Mon, 3 Apr 2023 12:28:43 +0800 Subject: [PATCH] lib/storage: fix reuse pendingMetricRow (#4049) --- lib/storage/storage.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/storage/storage.go b/lib/storage/storage.go index e29e9fa4c4..c855df8f9c 100644 --- a/lib/storage/storage.go +++ b/lib/storage/storage.go @@ -1851,7 +1851,8 @@ type pendingMetricRows struct { } func (pmrs *pendingMetricRows) reset() { - for _, pmr := range pmrs.pmrs { + for i := range pmrs.pmrs { + pmr := &pmrs.pmrs[i] pmr.MetricName = nil pmr.mr = nil } @@ -1875,10 +1876,14 @@ func (pmrs *pendingMetricRows) addRow(mr *MetricRow) error { pmrs.lastMetricName = pmrs.metricNamesBuf[metricNamesBufLen:] pmrs.lastMetricNameRaw = mr.MetricNameRaw } - pmrs.pmrs = append(pmrs.pmrs, pendingMetricRow{ - MetricName: pmrs.lastMetricName, - mr: mr, - }) + if cap(pmrs.pmrs) > len(pmrs.pmrs) { + pmrs.pmrs = pmrs.pmrs[:len(pmrs.pmrs)+1] + } else { + pmrs.pmrs = append(pmrs.pmrs, pendingMetricRow{}) + } + pmr := &pmrs.pmrs[len(pmrs.pmrs)-1] + pmr.MetricName = pmrs.lastMetricName + pmr.mr = mr return nil }