Skip to content

Commit 5318eee

Browse files
PSeitzfulmicoton
andauthored
replace serde_cbor with postcard (#3234)
* replace serde_cbor with postcard closes #3233 * Apply suggestions from code review Co-authored-by: Paul Masurel <[email protected]> --------- Co-authored-by: Paul Masurel <[email protected]>
1 parent 36051bd commit 5318eee

File tree

4 files changed

+35
-32
lines changed

4 files changed

+35
-32
lines changed

quickwit/Cargo.lock

Lines changed: 17 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

quickwit/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ opentelemetry-jaeger = { version = "0.17", features = ["rt-tokio"] }
106106
opentelemetry-otlp = "0.11.0"
107107
pin-project = "1.0.12"
108108
pnet = { version = "0.31.0", features = ["std"] }
109+
postcard = { version = "1.0.4", features = ["use-std"], default-features = false}
109110
predicates = "2"
110111
prettyplease = "0.2.0"
111112
proc-macro2 = "1.0.50"
@@ -149,7 +150,6 @@ rusoto_sts = { version = "0.48", default-features = false, features = [
149150
] }
150151
rust-embed = "6.6.0"
151152
serde = { version = "1.0", features = ["derive", "rc"] }
152-
serde_cbor = "0.11"
153153
serde_json = "1.0"
154154
serde_qs = { version = "0.10", features = ["warp"] }
155155
serde_with = "2.3.0"

quickwit/quickwit-directories/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ anyhow = { workspace = true }
1414
async-trait = { workspace = true }
1515
futures = { workspace = true }
1616
once_cell = { workspace = true }
17+
postcard = { workspace = true }
1718
serde = { workspace = true }
18-
serde_cbor = { workspace = true }
1919
serde_json = { workspace = true }
2020
tantivy = { workspace = true }
2121
thiserror = { workspace = true }

quickwit/quickwit-directories/src/hot_directory.rs

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use serde::{Deserialize, Serialize};
2828
use tantivy::directory::error::OpenReadError;
2929
use tantivy::directory::{FileHandle, FileSlice, OwnedBytes};
3030
use tantivy::error::DataCorruption;
31-
use tantivy::{Directory, HasLen, Index, IndexReader, ReloadPolicy};
31+
use tantivy::{Directory, HasLen, Index, IndexReader, ReloadPolicy, TantivyError};
3232

3333
use crate::{CachingDirectory, DebugProxyDirectory};
3434

@@ -100,7 +100,7 @@ impl StaticDirectoryCacheBuilder {
100100
// Write format version
101101
wrt.write_all(b"\x00")?;
102102

103-
let file_lengths_bytes = serde_cbor::to_vec(&self.file_lengths).unwrap();
103+
let file_lengths_bytes = postcard::to_allocvec(&self.file_lengths).unwrap();
104104
wrt.write_all(&(file_lengths_bytes.len() as u64).to_le_bytes())?;
105105
wrt.write_all(&file_lengths_bytes[..])?;
106106

@@ -113,7 +113,7 @@ impl StaticDirectoryCacheBuilder {
113113
offset += buf.len() as u64;
114114
data_buffer.extend_from_slice(&buf);
115115
}
116-
let idx_bytes = serde_cbor::to_vec(&data_idx).unwrap();
116+
let idx_bytes = postcard::to_allocvec(&data_idx).unwrap();
117117
wrt.write_all(&(idx_bytes.len() as u64).to_le_bytes())?;
118118
wrt.write_all(&idx_bytes[..])?;
119119
wrt.write_all(&data_buffer[..])?;
@@ -122,10 +122,10 @@ impl StaticDirectoryCacheBuilder {
122122
}
123123
}
124124

125-
fn deserialize_cbor<T>(bytes: &mut OwnedBytes) -> serde_cbor::Result<T>
125+
fn deserialize_postcard<T>(bytes: &mut OwnedBytes) -> postcard::Result<T>
126126
where T: serde::de::DeserializeOwned {
127127
let len = bytes.read_u64();
128-
let value = serde_cbor::from_reader(&bytes.as_slice()[..len as usize]);
128+
let value = postcard::from_bytes(&bytes.as_slice()[..len as usize]);
129129
bytes.advance(len as usize);
130130
value
131131
}
@@ -148,9 +148,9 @@ impl StaticDirectoryCache {
148148
));
149149
}
150150

151-
let file_lengths: HashMap<PathBuf, u64> = deserialize_cbor(&mut bytes).unwrap();
151+
let file_lengths: HashMap<PathBuf, u64> = deserialize_postcard(&mut bytes).unwrap();
152152

153-
let mut slice_offsets: Vec<(PathBuf, u64)> = deserialize_cbor(&mut bytes).unwrap();
153+
let mut slice_offsets: Vec<(PathBuf, u64)> = deserialize_postcard(&mut bytes).unwrap();
154154
slice_offsets.push((PathBuf::default(), bytes.len() as u64));
155155

156156
let slices = slice_offsets
@@ -214,8 +214,8 @@ impl StaticSliceCache {
214214
body_len_bytes.copy_from_slice(len_bytes.as_slice());
215215
let body_len = u64::from_le_bytes(body_len_bytes);
216216
let (body, idx) = body.split(body_len as usize);
217-
let mut idx_bytes = idx.as_slice();
218-
let index: SliceCacheIndex = serde_cbor::from_reader(&mut idx_bytes).map_err(|err| {
217+
let idx_bytes = idx.as_slice();
218+
let index: SliceCacheIndex = postcard::from_bytes(idx_bytes).map_err(|err| {
219219
DataCorruption::comment_only(format!("Failed to deserialize the slice index: {err:?}"))
220220
})?;
221221
Ok(StaticSliceCache { bytes: body, index })
@@ -305,8 +305,11 @@ impl StaticSliceCacheBuilder {
305305
total_len: self.total_len,
306306
slices: merged_slices,
307307
};
308-
serde_cbor::to_writer(&mut self.wrt, &slices_idx)
309-
.map_err(|err| io::Error::new(io::ErrorKind::Other, err))?;
308+
self.wrt.extend_from_slice(
309+
&postcard::to_allocvec(&slices_idx).map_err(|err| {
310+
TantivyError::InternalError(format!("Could not serialize {err:?}"))
311+
})?,
312+
);
310313
self.wrt.extend_from_slice(&self.offset.to_le_bytes()[..]);
311314
Ok(self.wrt)
312315
}
@@ -644,14 +647,8 @@ mod tests {
644647
stop: 5,
645648
addr: 4,
646649
};
647-
let bytes = serde_cbor::ser::to_vec(&slice_entry)?;
648-
assert_eq!(
649-
&bytes[..],
650-
&[
651-
163, 101, 115, 116, 97, 114, 116, 1, 100, 115, 116, 111, 112, 5, 100, 97, 100, 100,
652-
114, 4
653-
]
654-
);
650+
let bytes = postcard::to_allocvec(&slice_entry)?;
651+
assert_eq!(&bytes[..], &[1, 5, 4]);
655652
Ok(())
656653
}
657654

0 commit comments

Comments
 (0)