From ab1ee752d6d1793e6ef31333d1cfa27189abe29b Mon Sep 17 00:00:00 2001 From: discord9 <55937128+discord9@users.noreply.github.com> Date: Thu, 15 Oct 2026 12:19:28 +0800 Subject: [PATCH 1/3] refactor(datatypes): use standard series test module layout Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> --- src/datatypes/src/series.rs | 1 - src/datatypes/src/series/histogram.rs | 1 - src/datatypes/src/series/time.rs | 1 - 3 files changed, 3 deletions(-) diff --git a/src/datatypes/src/series.rs b/src/datatypes/src/series.rs index 24152366d47..44f6e00a628 100644 --- a/src/datatypes/src/series.rs +++ b/src/datatypes/src/series.rs @@ -16,7 +16,6 @@ pub mod histogram; pub mod time; #[cfg(test)] -#[path = "series/tests.rs"] mod tests; use std::sync::Arc; diff --git a/src/datatypes/src/series/histogram.rs b/src/datatypes/src/series/histogram.rs index 9b9322c2774..e01c347c224 100644 --- a/src/datatypes/src/series/histogram.rs +++ b/src/datatypes/src/series/histogram.rs @@ -489,5 +489,4 @@ fn append32(b: &mut ListBuilder, v: &[i32]) { } #[cfg(test)] -#[path = "histogram/tests.rs"] mod tests; diff --git a/src/datatypes/src/series/time.rs b/src/datatypes/src/series/time.rs index 8ba6f321d50..66da94684d7 100644 --- a/src/datatypes/src/series/time.rs +++ b/src/datatypes/src/series/time.rs @@ -20,7 +20,6 @@ use snafu::OptionExt; use crate::error::{InvalidSeriesSnafu, Result}; #[cfg(test)] -#[path = "time/tests.rs"] mod tests; /// Value description of a non-empty, fixed-step evaluation grid. From e8f76480d86e8e424514177fb1b3ff86269a6749 Mon Sep 17 00:00:00 2001 From: discord9 <55937128+discord9@users.noreply.github.com> Date: Thu, 15 Oct 2026 12:22:56 +0800 Subject: [PATCH 2/3] test(datatypes): remove duplicate absent-label lookup assertion Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> --- src/datatypes/src/series/tests.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/datatypes/src/series/tests.rs b/src/datatypes/src/series/tests.rs index bf767529a06..18ce6ceeecc 100644 --- a/src/datatypes/src/series/tests.rs +++ b/src/datatypes/src/series/tests.rs @@ -54,7 +54,6 @@ fn metric_identity_uses_contents_and_distinguishes_absent_from_empty() { assert_eq!(one.get("empty"), Some("")); assert_eq!(one.get("missing"), None); assert_eq!(one.get("__name__"), Some("cpu")); - assert_eq!(one.get("__name_missing"), None); } #[test] From a6cdbf966b78e48f884fbe6892630321dbc2442a Mon Sep 17 00:00:00 2001 From: discord9 <55937128+discord9@users.noreply.github.com> Date: Thu, 15 Oct 2026 12:41:47 +0800 Subject: [PATCH 3/3] fix(datatypes): avoid oversized default histogram buffers Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com> --- src/datatypes/src/series/histogram.rs | 19 ++++++++++--------- src/datatypes/src/series/histogram/tests.rs | 10 ++++++++++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/datatypes/src/series/histogram.rs b/src/datatypes/src/series/histogram.rs index e01c347c224..4aae9c2c4f3 100644 --- a/src/datatypes/src/series/histogram.rs +++ b/src/datatypes/src/series/histogram.rs @@ -345,14 +345,15 @@ impl Default for HistogramBatchBuilder { impl HistogramBatchBuilder { /// Creates an empty builder. pub fn new() -> Self { + // Avoid reserving Arrow's large default capacity for small histogram batches. Self { - schema: Int32Builder::new(), - threshold: Float64Builder::new(), - sum: Float64Builder::new(), - count: Float64Builder::new(), - zero: Float64Builder::new(), - hint: Int32Builder::new(), - start: Int64Builder::new(), + schema: Int32Builder::with_capacity(0), + threshold: Float64Builder::with_capacity(0), + sum: Float64Builder::with_capacity(0), + count: Float64Builder::with_capacity(0), + zero: Float64Builder::with_capacity(0), + hint: Int32Builder::with_capacity(0), + start: Int64Builder::with_capacity(0), custom: lb64(), po: lb32(), pl: lb32(), @@ -462,14 +463,14 @@ fn preflight(r: HistogramView<'_>, rows: usize, existing: [usize; 7]) -> Result< ) } fn lb64() -> ListBuilder { - ListBuilder::new(Float64Builder::new()).with_field(Arc::new(Field::new( + ListBuilder::new(Float64Builder::with_capacity(0)).with_field(Arc::new(Field::new( "item", DataType::Float64, false, ))) } fn lb32() -> ListBuilder { - ListBuilder::new(Int32Builder::new()).with_field(Arc::new(Field::new( + ListBuilder::new(Int32Builder::with_capacity(0)).with_field(Arc::new(Field::new( "item", DataType::Int32, false, diff --git a/src/datatypes/src/series/histogram/tests.rs b/src/datatypes/src/series/histogram/tests.rs index 58d761a5ac7..c81daef0270 100644 --- a/src/datatypes/src/series/histogram/tests.rs +++ b/src/datatypes/src/series/histogram/tests.rs @@ -44,6 +44,16 @@ fn batch() -> Arc { b.finish().unwrap() } +#[test] +fn tiny_histogram_batch_does_not_retain_large_default_buffers() { + let mut builder = HistogramBatchBuilder::new(); + builder.push(row(None, CounterResetHint::Unknown)).unwrap(); + let batch = builder.finish().unwrap(); + let retained = batch.as_arrow().get_buffer_memory_size(); + + assert!(retained < 4096, "retained {retained} bytes"); +} + #[test] fn builder_views_and_arrow_buffer_borrowing() { let empty = HistogramBatchBuilder::new();