diff --git a/src/servers/src/http/prom_store.rs b/src/servers/src/http/prom_store.rs index b678a2e47ec..98e79bb8841 100644 --- a/src/servers/src/http/prom_store.rs +++ b/src/servers/src/http/prom_store.rs @@ -175,17 +175,15 @@ async fn remote_write_v1( processor.set_pipeline(pipeline_handler, query_ctx.clone(), pipeline_def); } - let mut decoded = - decode_remote_write_request(is_zstd, body, prom_validation_mode, &mut processor)?; + // Hold `req` until the write finishes. The v1 decoder fabricates + // `&'static [u8]` into its own decode buffer, so nothing about that + // buffer's lifetime is checked by the compiler. + let mut req = decode_remote_write_request(is_zstd, body, prom_validation_mode, &mut processor)?; - // Rows and pipeline values own their data; the decode buffer need not span downstream awaits. let req = if processor.use_pipeline { - drop(decoded); processor.exec_pipeline().await? } else { - let req = decoded.as_insert_requests(); - drop(decoded); - req + req.as_insert_requests() }; let batches = into_prom_write_batches(req, query_ctx);