introduce a trait to upgrade the indexes

This commit is contained in:
Tamo 2025-01-23 10:50:16 +01:00 committed by Louis Dureuil
parent fd5649091d
commit c27c923439
No known key found for this signature in database
4 changed files with 104 additions and 46 deletions

View file

@ -316,7 +316,10 @@ impl IndexScheduler {
Ok(vec![task])
}
Batch::UpgradeDatabase { mut tasks } => {
let ret = catch_unwind(AssertUnwindSafe(|| self.process_upgrade(progress)));
let KindWithContent::UpgradeDatabase { from } = tasks.last().unwrap().kind else {
unreachable!();
};
let ret = catch_unwind(AssertUnwindSafe(|| self.process_upgrade(from, progress)));
match ret {
Ok(Ok(())) => (),
Ok(Err(e)) => return Err(Error::DatabaseUpgrade(Box::new(e))),

View file

@ -4,7 +4,11 @@ use meilisearch_types::milli::progress::{Progress, VariableNameStep};
use crate::{Error, IndexScheduler, Result};
impl IndexScheduler {
pub(super) fn process_upgrade(&self, progress: Progress) -> Result<()> {
pub(super) fn process_upgrade(
&self,
db_version: (u32, u32, u32),
progress: Progress,
) -> Result<()> {
#[cfg(test)]
self.maybe_fail(crate::test_utils::FailureLocation::ProcessUpgrade)?;
@ -19,9 +23,13 @@ impl IndexScheduler {
));
let index = self.index(uid)?;
let mut index_wtxn = index.write_txn()?;
let regen_stats =
milli::update::upgrade::upgrade(&mut index_wtxn, &index, progress.clone())
.map_err(|e| Error::from_milli(e, Some(uid.to_string())))?;
let regen_stats = milli::update::upgrade::upgrade(
&mut index_wtxn,
&index,
db_version,
progress.clone(),
)
.map_err(|e| Error::from_milli(e, Some(uid.to_string())))?;
if regen_stats {
let stats = crate::index_mapper::IndexStats::new(&index, &index_wtxn)
.map_err(|e| Error::from_milli(e, Some(uid.to_string())))?;