Merge pull request #12997 from prometheus/wal-samples-size

TSDB: Pre-size buffer to read samples from WAL
This commit is contained in:
Björn Rabenstein 2023-10-24 13:26:06 +02:00 committed by GitHub
commit 059f7f0738
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -304,6 +304,10 @@ func (d *Decoder) Samples(rec []byte, samples []RefSample) ([]RefSample, error)
baseRef = dec.Be64() baseRef = dec.Be64()
baseTime = dec.Be64int64() baseTime = dec.Be64int64()
) )
// Allow 1 byte for each varint and 8 for the value; the output slice must be at least that big.
if minSize := dec.Len() / (1 + 1 + 8); cap(samples) < minSize {
samples = make([]RefSample, 0, minSize)
}
for len(dec.B) > 0 && dec.Err() == nil { for len(dec.B) > 0 && dec.Err() == nil {
dref := dec.Varint64() dref := dec.Varint64()
dtime := dec.Varint64() dtime := dec.Varint64()