From 93978ec38a345cd0acbc068cde59f7e739ecf1bb Mon Sep 17 00:00:00 2001 From: Kerollmops Date: Wed, 9 Jun 2021 11:28:38 +0200 Subject: [PATCH] Serializing a RoaringBitmap into a Vec cannot fail --- .../roaring_bitmap/cbo_roaring_bitmap_codec.rs | 9 ++++----- milli/src/update/index_documents/merge_function.rs | 2 +- milli/src/update/index_documents/store.rs | 7 +++---- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/milli/src/heed_codec/roaring_bitmap/cbo_roaring_bitmap_codec.rs b/milli/src/heed_codec/roaring_bitmap/cbo_roaring_bitmap_codec.rs index 8ccf831e3..325effa73 100644 --- a/milli/src/heed_codec/roaring_bitmap/cbo_roaring_bitmap_codec.rs +++ b/milli/src/heed_codec/roaring_bitmap/cbo_roaring_bitmap_codec.rs @@ -23,18 +23,17 @@ impl CboRoaringBitmapCodec { } } - pub fn serialize_into(roaring: &RoaringBitmap, vec: &mut Vec) -> io::Result<()> { + pub fn serialize_into(roaring: &RoaringBitmap, vec: &mut Vec) { if roaring.len() <= THRESHOLD as u64 { // If the number of items (u32s) to encode is less than or equal to the threshold // it means that it would weigh the same or less than the RoaringBitmap // header, so we directly encode them using ByteOrder instead. for integer in roaring { - vec.write_u32::(integer)?; + vec.write_u32::(integer).unwrap(); } - Ok(()) } else { // Otherwise, we use the classic RoaringBitmapCodec that writes a header. - roaring.serialize_into(vec) + roaring.serialize_into(vec).unwrap(); } } @@ -68,7 +67,7 @@ impl heed::BytesEncode<'_> for CboRoaringBitmapCodec { fn bytes_encode(item: &Self::EItem) -> Option> { let mut vec = Vec::with_capacity(Self::serialized_size(item)); - Self::serialize_into(item, &mut vec).ok()?; + Self::serialize_into(item, &mut vec); Some(Cow::Owned(vec)) } } diff --git a/milli/src/update/index_documents/merge_function.rs b/milli/src/update/index_documents/merge_function.rs index 230116e99..6da19bc84 100644 --- a/milli/src/update/index_documents/merge_function.rs +++ b/milli/src/update/index_documents/merge_function.rs @@ -112,6 +112,6 @@ fn cbo_roaring_bitmap_merge(values: &[Cow<[u8]>]) -> anyhow::Result> { } let mut vec = Vec::new(); - CboRoaringBitmapCodec::serialize_into(&head, &mut vec)?; + CboRoaringBitmapCodec::serialize_into(&head, &mut vec); Ok(vec) } diff --git a/milli/src/update/index_documents/store.rs b/milli/src/update/index_documents/store.rs index 08050092e..69263e5a0 100644 --- a/milli/src/update/index_documents/store.rs +++ b/milli/src/update/index_documents/store.rs @@ -407,7 +407,7 @@ impl<'s, A: AsRef<[u8]>> Store<'s, A> { // We serialize the document ids into a buffer buffer.clear(); buffer.reserve(CboRoaringBitmapCodec::serialized_size(&docids)); - CboRoaringBitmapCodec::serialize_into(&docids, &mut buffer)?; + CboRoaringBitmapCodec::serialize_into(&docids, &mut buffer); // that we write under the generated key into MTBL if lmdb_key_valid_size(&key) { sorter.insert(&key, &buffer)?; @@ -469,8 +469,7 @@ impl<'s, A: AsRef<[u8]>> Store<'s, A> { data_buffer.clear(); let positions = RoaringBitmap::from_iter(Some(document_id)); // We serialize the positions into a buffer. - CboRoaringBitmapCodec::serialize_into(&positions, &mut data_buffer) - .with_context(|| "could not serialize positions")?; + CboRoaringBitmapCodec::serialize_into(&positions, &mut data_buffer); // that we write under the generated key into MTBL if lmdb_key_valid_size(&key_buffer) { @@ -706,7 +705,7 @@ impl<'s, A: AsRef<[u8]>> Store<'s, A> { let mut docids_buffer = Vec::new(); for ((fid, count), docids) in self.field_id_word_count_docids { docids_buffer.clear(); - CboRoaringBitmapCodec::serialize_into(&docids, &mut docids_buffer)?; + CboRoaringBitmapCodec::serialize_into(&docids, &mut docids_buffer); self.field_id_word_count_docids_sorter.insert([fid, count], &docids_buffer)?; }