From 4e24839a2c8353c8b4c552ec115138c9d00a98fd Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Tue, 25 Feb 2020 19:34:35 +0200 Subject: [PATCH] app/vmagent: do not allow sending unpacked requests with sizes exceeding `-maxInsertRequestSize` --- app/vmagent/remotewrite/pendingseries.go | 10 +++++----- lib/protoparser/promremotewrite/streamparser.go | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/vmagent/remotewrite/pendingseries.go b/app/vmagent/remotewrite/pendingseries.go index b583ebffa..e5895e238 100644 --- a/app/vmagent/remotewrite/pendingseries.go +++ b/app/vmagent/remotewrite/pendingseries.go @@ -160,17 +160,17 @@ func pushWriteRequest(wr *prompbmarshal.WriteRequest, pushBlock func(block []byt } bb := writeRequestBufPool.Get() bb.B = prompbmarshal.MarshalWriteRequest(bb.B[:0], wr) - zb := snappyBufPool.Get() - zb.B = snappy.Encode(zb.B[:cap(zb.B)], bb.B) - writeRequestBufPool.Put(bb) - if len(zb.B) <= persistentqueue.MaxBlockSize { + if len(bb.B) <= persistentqueue.MaxBlockSize { + zb := snappyBufPool.Get() + zb.B = snappy.Encode(zb.B[:cap(zb.B)], bb.B) + writeRequestBufPool.Put(bb) pushBlock(zb.B) blockSizeRows.Update(float64(len(wr.Timeseries))) blockSizeBytes.Update(float64(len(zb.B))) snappyBufPool.Put(zb) return } - snappyBufPool.Put(zb) + writeRequestBufPool.Put(bb) // Too big block. Recursively split it into smaller parts. timeseries := wr.Timeseries diff --git a/lib/protoparser/promremotewrite/streamparser.go b/lib/protoparser/promremotewrite/streamparser.go index 986528bfb..e3576b4c5 100644 --- a/lib/protoparser/promremotewrite/streamparser.go +++ b/lib/protoparser/promremotewrite/streamparser.go @@ -112,7 +112,7 @@ func readSnappy(dst []byte, r io.Reader) ([]byte, error) { return dst, err } if len(buf) > *maxInsertRequestSize { - return dst, fmt.Errorf("too big unpacked request; mustn't exceed `-maxInsertRequestSize=%d` bytes", *maxInsertRequestSize) + return dst, fmt.Errorf("too big unpacked request; mustn't exceed `-maxInsertRequestSize=%d` bytes; got %d bytes", *maxInsertRequestSize, len(buf)) } if len(buf) > 0 && len(dst) < cap(dst) && &buf[0] == &dst[len(dst):cap(dst)][0] { dst = dst[:len(dst)+len(buf)]