diff --git a/crates/milli/src/update/upgrade/mod.rs b/crates/milli/src/update/upgrade/mod.rs index 98cad3dad..7c8dcf64a 100644 --- a/crates/milli/src/update/upgrade/mod.rs +++ b/crates/milli/src/update/upgrade/mod.rs @@ -1,15 +1,17 @@ mod v1_12; mod v1_13; +mod v1_14; use heed::RwTxn; use v1_12::{V1_12_3_To_V1_13_0, V1_12_To_V1_12_3}; -use v1_13::{V1_13_0_To_V1_13_1, V1_13_1_To_Current}; +use v1_13::{V1_13_0_To_V1_13_1, V1_13_1_To_Latest_V1_13}; +use v1_14::Latest_V1_13_To_Latest_V1_14; use crate::progress::{Progress, VariableNameStep}; use crate::{Index, InternalError, Result}; trait UpgradeIndex { - /// Returns true if the index scheduler must regenerate its cached stats + /// Returns `true` if the index scheduler must regenerate its cached stats. fn upgrade( &self, wtxn: &mut RwTxn, @@ -32,15 +34,17 @@ pub fn upgrade( &V1_12_To_V1_12_3 {}, &V1_12_3_To_V1_13_0 {}, &V1_13_0_To_V1_13_1 {}, - &V1_13_1_To_Current {}, + &V1_13_1_To_Latest_V1_13 {}, + &Latest_V1_13_To_Latest_V1_14 {}, ]; let start = match from { (1, 12, 0..=2) => 0, (1, 12, 3..) => 1, (1, 13, 0) => 2, + (1, 13, _) => 4, // We must handle the current version in the match because in case of a failure some index may have been upgraded but not other. - (1, 13, _) => 3, + (1, 14, _) => 4, (major, minor, patch) => { return Err(InternalError::CannotUpgradeToVersion(major, minor, patch).into()) } @@ -50,7 +54,6 @@ pub fn upgrade( let upgrade_path = &upgrade_functions[start..]; let mut current_version = from; - let mut regenerate_stats = false; for (i, upgrade) in upgrade_path.iter().enumerate() { let target = upgrade.target_version(); diff --git a/crates/milli/src/update/upgrade/v1_13.rs b/crates/milli/src/update/upgrade/v1_13.rs index f1d56d9cb..8e5e052bd 100644 --- a/crates/milli/src/update/upgrade/v1_13.rs +++ b/crates/milli/src/update/upgrade/v1_13.rs @@ -37,9 +37,9 @@ impl UpgradeIndex for V1_13_0_To_V1_13_1 { } #[allow(non_camel_case_types)] -pub(super) struct V1_13_1_To_Current(); +pub(super) struct V1_13_1_To_Latest_V1_13(); -impl UpgradeIndex for V1_13_1_To_Current { +impl UpgradeIndex for V1_13_1_To_Latest_V1_13 { fn upgrade( &self, _wtxn: &mut RwTxn, diff --git a/crates/milli/src/update/upgrade/v1_14.rs b/crates/milli/src/update/upgrade/v1_14.rs new file mode 100644 index 000000000..832f9ec83 --- /dev/null +++ b/crates/milli/src/update/upgrade/v1_14.rs @@ -0,0 +1,40 @@ +use heed::RwTxn; + +use super::UpgradeIndex; +use crate::progress::Progress; +use crate::{make_enum_progress, Index, Result}; + +#[allow(non_camel_case_types)] +pub(super) struct Latest_V1_13_To_Latest_V1_14(); + +impl UpgradeIndex for Latest_V1_13_To_Latest_V1_14 { + fn upgrade( + &self, + wtxn: &mut RwTxn, + index: &Index, + _original: (u32, u32, u32), + progress: Progress, + ) -> Result { + make_enum_progress! { + enum VectorStore { + UpdateInternalVersions, + } + }; + + progress.update_progress(VectorStore::UpdateInternalVersions); + + let rtxn = index.read_txn()?; + arroy::upgrade::cosine_from_0_5_to_0_6( + &rtxn, + index.vector_arroy, + &mut wtxn, + index.vector_arroy, + )?; + + Ok(true) + } + + fn target_version(&self) -> (u32, u32, u32) { + (1, 14, 0) + } +}