mirror of
https://github.com/meilisearch/MeiliSearch
synced 2025-06-17 20:27:41 +02:00
42 lines
1.6 KiB
Rust
42 lines
1.6 KiB
Rust
use meilisearch_types::{
|
|
milli,
|
|
milli::progress::{Progress, VariableNameStep},
|
|
};
|
|
|
|
use crate::{processing::UpgradeDatabaseProgress, Error, IndexScheduler, Result};
|
|
|
|
impl IndexScheduler {
|
|
pub(super) fn process_upgrade(&self, progress: Progress) -> Result<()> {
|
|
progress.update_progress(UpgradeDatabaseProgress::EnsuringCorrectnessOfTheSwap);
|
|
|
|
#[cfg(test)]
|
|
self.maybe_fail(crate::test_utils::FailureLocation::ProcessUpgrade)?;
|
|
|
|
enum UpgradeIndex {}
|
|
let indexes = self.index_names()?;
|
|
|
|
for (i, uid) in indexes.iter().enumerate() {
|
|
progress.update_progress(VariableNameStep::<UpgradeIndex>::new(
|
|
format!("Upgrading index `{uid}`"),
|
|
i as u32,
|
|
indexes.len() as u32,
|
|
));
|
|
let index = self.index(uid)?;
|
|
let mut wtxn = index.write_txn()?;
|
|
let regen_stats = milli::update::upgrade::upgrade(&mut wtxn, &index, progress.clone())
|
|
.map_err(|e| Error::from_milli(e, Some(uid.to_string())))?;
|
|
if regen_stats {
|
|
let stats = crate::index_mapper::IndexStats::new(&index, &wtxn)
|
|
.map_err(|e| Error::from_milli(e, Some(uid.to_string())))?;
|
|
// Release wtxn as soon as possible because it stops us from registering tasks
|
|
let mut index_schd_wtxn = self.env.write_txn()?;
|
|
self.index_mapper.store_stats_of(&mut index_schd_wtxn, uid, &stats)?;
|
|
index_schd_wtxn.commit()?;
|
|
}
|
|
wtxn.commit()?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
}
|