Skip to content

Commit 30d0479

Browse files
authored
[PERF] Remote-write: re-use memory to read WAL data (prometheus#16197)
The `:=` causes new variables to be created, which means the outer slice stays at nil, and new memory is allocated every time round the loop. Extracted from prometheus#16182 Credit to @bwplotka. Signed-off-by: Bryan Boreham <bjboreham@gmail.com>
1 parent 53be282 commit 30d0479

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

tsdb/wlog/watcher.go

+8-7
Original file line numberDiff line numberDiff line change
@@ -491,12 +491,13 @@ func (w *Watcher) readSegment(r *LiveReader, segmentNum int, tail bool) error {
491491
metadata []record.RefMetadata
492492
)
493493
for r.Next() && !isClosed(w.quit) {
494+
var err error
494495
rec := r.Record()
495496
w.recordsReadMetric.WithLabelValues(dec.Type(rec).String()).Inc()
496497

497498
switch dec.Type(rec) {
498499
case record.Series:
499-
series, err := dec.Series(rec, series[:0])
500+
series, err = dec.Series(rec, series[:0])
500501
if err != nil {
501502
w.recordDecodeFailsMetric.Inc()
502503
return err
@@ -509,7 +510,7 @@ func (w *Watcher) readSegment(r *LiveReader, segmentNum int, tail bool) error {
509510
if !tail {
510511
break
511512
}
512-
samples, err := dec.Samples(rec, samples[:0])
513+
samples, err = dec.Samples(rec, samples[:0])
513514
if err != nil {
514515
w.recordDecodeFailsMetric.Inc()
515516
return err
@@ -539,7 +540,7 @@ func (w *Watcher) readSegment(r *LiveReader, segmentNum int, tail bool) error {
539540
if !tail {
540541
break
541542
}
542-
exemplars, err := dec.Exemplars(rec, exemplars[:0])
543+
exemplars, err = dec.Exemplars(rec, exemplars[:0])
543544
if err != nil {
544545
w.recordDecodeFailsMetric.Inc()
545546
return err
@@ -554,7 +555,7 @@ func (w *Watcher) readSegment(r *LiveReader, segmentNum int, tail bool) error {
554555
if !tail {
555556
break
556557
}
557-
histograms, err := dec.HistogramSamples(rec, histograms[:0])
558+
histograms, err = dec.HistogramSamples(rec, histograms[:0])
558559
if err != nil {
559560
w.recordDecodeFailsMetric.Inc()
560561
return err
@@ -582,7 +583,7 @@ func (w *Watcher) readSegment(r *LiveReader, segmentNum int, tail bool) error {
582583
if !tail {
583584
break
584585
}
585-
floatHistograms, err := dec.FloatHistogramSamples(rec, floatHistograms[:0])
586+
floatHistograms, err = dec.FloatHistogramSamples(rec, floatHistograms[:0])
586587
if err != nil {
587588
w.recordDecodeFailsMetric.Inc()
588589
return err
@@ -606,12 +607,12 @@ func (w *Watcher) readSegment(r *LiveReader, segmentNum int, tail bool) error {
606607
if !w.sendMetadata {
607608
break
608609
}
609-
meta, err := dec.Metadata(rec, metadata[:0])
610+
metadata, err = dec.Metadata(rec, metadata[:0])
610611
if err != nil {
611612
w.recordDecodeFailsMetric.Inc()
612613
return err
613614
}
614-
w.writer.StoreMetadata(meta)
615+
w.writer.StoreMetadata(metadata)
615616

616617
case record.Unknown:
617618
// Could be corruption, or reading from a WAL from a newer Prometheus.

0 commit comments

Comments
 (0)