From 2098fca47f6d6f987128e5cf7e09def8e9fff589 Mon Sep 17 00:00:00 2001 From: "cong.xie" Date: Thu, 19 Feb 2026 14:13:17 -0500 Subject: [PATCH] Restore use_serde feature and simplify PercentilesCollector Keep use_serde on sketches-ddsketch so DDSketch derives Serialize/Deserialize, removing the need for custom impls on PercentilesCollector. Co-authored-by: Cursor --- Cargo.toml | 2 +- src/aggregation/metric/percentiles.rs | 23 ++--------------------- 2 files changed, 3 insertions(+), 22 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 895fa5b87..6e4967028 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,7 +64,7 @@ query-grammar = { version = "0.25.0", path = "./query-grammar", package = "tanti tantivy-bitpacker = { version = "0.9", path = "./bitpacker" } common = { version = "0.10", path = "./common/", package = "tantivy-common" } tokenizer-api = { version = "0.6", path = "./tokenizer-api", package = "tantivy-tokenizer-api" } -sketches-ddsketch = { git = "https://github.com/quickwit-oss/rust-sketches-ddsketch.git", rev = "555caf1" } +sketches-ddsketch = { git = "https://github.com/quickwit-oss/rust-sketches-ddsketch.git", rev = "555caf1", features = ["use_serde"] } datasketches = "0.2.0" futures-util = { version = "0.3.28", optional = true } futures-channel = { version = "0.3.28", optional = true } diff --git a/src/aggregation/metric/percentiles.rs b/src/aggregation/metric/percentiles.rs index a80b78af8..62df48c83 100644 --- a/src/aggregation/metric/percentiles.rs +++ b/src/aggregation/metric/percentiles.rs @@ -1,7 +1,6 @@ use std::fmt::Debug; -use serde::ser::Serializer; -use serde::{Deserialize, Deserializer, Serialize}; +use serde::{Deserialize, Serialize}; use super::*; use crate::aggregation::agg_data::AggregationsSegmentCtx; @@ -143,29 +142,11 @@ pub(crate) struct SegmentPercentilesCollector { pub accessor: Column, } -#[derive(Clone)] +#[derive(Clone, Serialize, Deserialize)] /// The percentiles collector used during segment collection and for merging results. -/// Uses Java-compatible DDSketch binary encoding for compact serialization -/// and cross-language compatibility (e.g. Java `sketches-java` library). pub struct PercentilesCollector { sketch: sketches_ddsketch::DDSketch, } - -impl Serialize for PercentilesCollector { - fn serialize(&self, serializer: S) -> Result { - let bytes = self.sketch.to_java_bytes(); - serializer.serialize_bytes(&bytes) - } -} - -impl<'de> Deserialize<'de> for PercentilesCollector { - fn deserialize>(deserializer: D) -> Result { - let bytes: Vec = Deserialize::deserialize(deserializer)?; - let sketch = - sketches_ddsketch::DDSketch::from_java_bytes(&bytes).map_err(serde::de::Error::custom)?; - Ok(Self { sketch }) - } -} impl Default for PercentilesCollector { fn default() -> Self { Self::new()