Skip to content

Commit

Permalink
fix a few bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
irevoire committed Oct 29, 2024
1 parent 3908c9e commit 32670e7
Showing 1 changed file with 14 additions and 13 deletions.
27 changes: 14 additions & 13 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -173,9 +173,9 @@ impl TryFrom<u8> for OldNodeMode {

fn try_from(v: u8) -> std::result::Result<Self, Self::Error> {
match v {
v if v == NodeMode::Item as u8 => Ok(OldNodeMode::Item),
v if v == NodeMode::Tree as u8 => Ok(OldNodeMode::Tree),
v if v == NodeMode::Metadata as u8 => Ok(OldNodeMode::Metadata),
v if v == OldNodeMode::Item as u8 => Ok(OldNodeMode::Item),
v if v == OldNodeMode::Tree as u8 => Ok(OldNodeMode::Tree),
v if v == OldNodeMode::Metadata as u8 => Ok(OldNodeMode::Metadata),
v => Err(format!("Could not convert {v} as a `NodeMode`.")),
}
}
Expand All @@ -185,24 +185,24 @@ impl TryFrom<u8> for OldNodeMode {
/// /!\ This is only valid if the arroy database was generated by Meilisearch. Do not try to use it yourself.
pub fn ugrade_from_prev_version(
rtxn: &RoTxn,
read_database: heed::Database<Unspecified, Unspecified>,
wtxn: &mut RwTxn,
database: heed::Database<Unspecified, Unspecified>,
write_database: heed::Database<Unspecified, Unspecified>,
) -> Result<()> {
// We need to update EVERY single nodes, thus we can clear the whole DB initially
database.clear(wtxn)?;
write_database.clear(wtxn)?;

// Then we **must** iterate over everything in the database to be sure we don't miss anything.
for ret in database.remap_types::<internals::KeyCodec, LazyDecode<Bytes>>().iter(rtxn)? {
for ret in read_database.remap_types::<internals::KeyCodec, LazyDecode<Bytes>>().iter(rtxn)? {
let (mut key, value) = ret?;
let old_mode = OldNodeMode::try_from(key.node.mode as u8)
.map_err(|_| Error::CannotDecodeKeyMode { mode: key.node.mode })?;

// All the modes have been remapped
match old_mode {
OldNodeMode::Item => {
key.node.mode = NodeMode::Item;
// In case of an item there is nothing else to do
database.remap_types::<KeyCodec, Bytes>().put(
write_database.remap_types::<KeyCodec, Bytes>().put(
wtxn,
&key,
value.remap::<Bytes>().decode().unwrap(),
Expand Down Expand Up @@ -230,7 +230,7 @@ pub fn ugrade_from_prev_version(
OldNodeMode::Metadata => NodeMode::Metadata,
};
}
database
write_database
.remap_types::<KeyCodec, NodeCodec<Cosine>>()
.put(wtxn, &key, &tree_node)?;
}
Expand All @@ -241,21 +241,22 @@ pub fn ugrade_from_prev_version(
// The distance has been renamed
let mut metadata = value.remap::<MetadataCodec>().decode().unwrap();
metadata.distance = Cosine::name();
database
write_database
.remap_types::<KeyCodec, MetadataCodec>()
.put(wtxn, &key, &metadata)?;
}
1 => {
key.node.mode = NodeMode::Updated;
// In this case we have a roaring bitmap of document id
// that we must re-insert as multiple values
let updated = value.remap::<RoaringBitmapCodec>().decode().unwrap();
let updated =
value.remap::<RoaringBitmapCodec>().decode().unwrap_or_default();
for item in updated {
key.node.item = item;
database.remap_types::<KeyCodec, Unit>().put(wtxn, &key, &())?;
write_database.remap_types::<KeyCodec, Unit>().put(wtxn, &key, &())?;
}
}
_ => unreachable!(),
_ => (),
}
}
};
Expand Down

0 comments on commit 32670e7

Please sign in to comment.