From d7904f95da906a330526364c8b99bf37fec83ebc Mon Sep 17 00:00:00 2001 From: Dennis Zhuang Date: Sat, 19 Sep 2026 22:22:05 +0800 Subject: [PATCH] perf(prom): release the compressed remote write body after decompression Both the v1 and v2 decoders held the compressed Bytes until they returned, which spans the whole protobuf decode and row conversion. Decompression copies the payload into an independent buffer, so the body can go as soon as it succeeds. The compression fallback, decode errors and request counting are unchanged. Signed-off-by: Dennis Zhuang --- src/servers/src/prom_remote_write/mod.rs | 2 ++ src/servers/src/prom_remote_write/v2.rs | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/servers/src/prom_remote_write/mod.rs b/src/servers/src/prom_remote_write/mod.rs index 73f968b6084..c9aabfb2745 100644 --- a/src/servers/src/prom_remote_write/mod.rs +++ b/src/servers/src/prom_remote_write/mod.rs @@ -77,6 +77,8 @@ pub fn decode_remote_write_request( // fallback to the other compression method try_decompress(!is_zstd, &body[..])? }; + // Decompression copied the payload out, so the compressed body is no longer needed. + drop(body); let mut request = PROM_WRITE_REQUEST_POOL.pull(PromWriteRequest::default); diff --git a/src/servers/src/prom_remote_write/v2.rs b/src/servers/src/prom_remote_write/v2.rs index b388071106f..2f1f4d410c4 100644 --- a/src/servers/src/prom_remote_write/v2.rs +++ b/src/servers/src/prom_remote_write/v2.rs @@ -143,6 +143,8 @@ pub(crate) fn decode_remote_write_v2( } else { try_decompress(!is_zstd, &body[..])? }; + // Decompression copied the payload out, so the compressed body is no longer needed. + drop(body); let request = BorrowedRequest::decode(&buf).context(error::DecodePromRemoteRequestSnafu)?; drop(decode_timer);