mirror of
				https://github.com/meilisearch/meilisearch.git
				synced 2025-10-30 23:46:28 +00:00 
			
		
		
		
	Dumpless upgrade
This commit is contained in:
		| @@ -3,7 +3,7 @@ mod v1_13; | ||||
|  | ||||
| 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_Current; | ||||
| use v1_13::{V1_13_0_To_V1_13_1, V1_13_1_To_Current}; | ||||
|  | ||||
| use crate::progress::{Progress, VariableNameStep}; | ||||
| use crate::{Index, InternalError, Result}; | ||||
| @@ -28,13 +28,18 @@ pub fn upgrade( | ||||
|     progress: Progress, | ||||
| ) -> Result<bool> { | ||||
|     let from = index.get_version(wtxn)?.unwrap_or(db_version); | ||||
|     let upgrade_functions: &[&dyn UpgradeIndex] = | ||||
|         &[&V1_12_To_V1_12_3 {}, &V1_12_3_To_V1_13_0 {}, &V1_13_0_To_Current()]; | ||||
|     let upgrade_functions: &[&dyn UpgradeIndex] = &[ | ||||
|         &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 {}, | ||||
|     ]; | ||||
|  | ||||
|     let start = match from { | ||||
|         (1, 12, 0..=2) => 0, | ||||
|         (1, 12, 3..) => 1, | ||||
|         (1, 13, 0) => 2, | ||||
|         (1, 13, 1) => 3, | ||||
|         // 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, _) => return Ok(false), | ||||
|         (major, minor, patch) => { | ||||
|   | ||||
| @@ -2,13 +2,44 @@ use heed::RwTxn; | ||||
|  | ||||
| use super::UpgradeIndex; | ||||
| use crate::constants::{VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH}; | ||||
| use crate::database_stats::DatabaseStats; | ||||
| use crate::progress::Progress; | ||||
| use crate::{Index, Result}; | ||||
| use crate::{make_enum_progress, Index, Result}; | ||||
|  | ||||
| #[allow(non_camel_case_types)] | ||||
| pub(super) struct V1_13_0_To_Current(); | ||||
| pub(super) struct V1_13_0_To_V1_13_1(); | ||||
|  | ||||
| impl UpgradeIndex for V1_13_0_To_Current { | ||||
| impl UpgradeIndex for V1_13_0_To_V1_13_1 { | ||||
|     fn upgrade( | ||||
|         &self, | ||||
|         wtxn: &mut RwTxn, | ||||
|         index: &Index, | ||||
|         _original: (u32, u32, u32), | ||||
|         progress: Progress, | ||||
|     ) -> Result<bool> { | ||||
|         make_enum_progress! { | ||||
|             enum DocumentsStats { | ||||
|                 CreatingDocumentsStats, | ||||
|             } | ||||
|         }; | ||||
|  | ||||
|         // Create the new documents stats. | ||||
|         progress.update_progress(DocumentsStats::CreatingDocumentsStats); | ||||
|         let stats = DatabaseStats::new(index.documents.remap_types(), wtxn)?; | ||||
|         index.put_documents_stats(wtxn, stats)?; | ||||
|  | ||||
|         Ok(true) | ||||
|     } | ||||
|  | ||||
|     fn target_version(&self) -> (u32, u32, u32) { | ||||
|         (1, 13, 1) | ||||
|     } | ||||
| } | ||||
|  | ||||
| #[allow(non_camel_case_types)] | ||||
| pub(super) struct V1_13_1_To_Current(); | ||||
|  | ||||
| impl UpgradeIndex for V1_13_1_To_Current { | ||||
|     fn upgrade( | ||||
|         &self, | ||||
|         _wtxn: &mut RwTxn, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user