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 <cursoragent@cursor.com>
This commit is contained in:
cong.xie
2026-02-19 14:13:17 -05:00
parent 1251b40c93
commit 2098fca47f
2 changed files with 3 additions and 22 deletions

View File

@@ -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 }

View File

@@ -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<u64>,
}
#[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<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
let bytes = self.sketch.to_java_bytes();
serializer.serialize_bytes(&bytes)
}
}
impl<'de> Deserialize<'de> for PercentilesCollector {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let bytes: Vec<u8> = 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()