mirror of
				https://github.com/meilisearch/meilisearch.git
				synced 2025-10-31 07:56:28 +00:00 
			
		
		
		
	Support network in dumps
This commit is contained in:
		| @@ -196,6 +196,10 @@ impl CompatV5ToV6 { | ||||
|     pub fn features(&self) -> Result<Option<v6::RuntimeTogglableFeatures>> { | ||||
|         Ok(None) | ||||
|     } | ||||
|  | ||||
|     pub fn network(&self) -> Result<Option<&v6::Network>> { | ||||
|         Ok(None) | ||||
|     } | ||||
| } | ||||
|  | ||||
| pub enum CompatIndexV5ToV6 { | ||||
|   | ||||
| @@ -114,6 +114,13 @@ impl DumpReader { | ||||
|             DumpReader::Compat(compat) => compat.features(), | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     pub fn network(&self) -> Result<Option<&v6::Network>> { | ||||
|         match self { | ||||
|             DumpReader::Current(current) => Ok(current.network()), | ||||
|             DumpReader::Compat(compat) => compat.network(), | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl From<V6Reader> for DumpReader { | ||||
|   | ||||
| @@ -20,6 +20,7 @@ pub type Unchecked = meilisearch_types::settings::Unchecked; | ||||
| pub type Task = crate::TaskDump; | ||||
| pub type Key = meilisearch_types::keys::Key; | ||||
| pub type RuntimeTogglableFeatures = meilisearch_types::features::RuntimeTogglableFeatures; | ||||
| pub type Network = meilisearch_types::features::Network; | ||||
|  | ||||
| // ===== Other types to clarify the code of the compat module | ||||
| // everything related to the tasks | ||||
| @@ -50,6 +51,7 @@ pub struct V6Reader { | ||||
|     tasks: BufReader<File>, | ||||
|     keys: BufReader<File>, | ||||
|     features: Option<RuntimeTogglableFeatures>, | ||||
|     network: Option<Network>, | ||||
| } | ||||
|  | ||||
| impl V6Reader { | ||||
| @@ -78,12 +80,30 @@ impl V6Reader { | ||||
|             None | ||||
|         }; | ||||
|  | ||||
|         let network_file = match fs::read(dump.path().join("network.json")) { | ||||
|             Ok(network_file) => Some(network_file), | ||||
|             Err(error) => match error.kind() { | ||||
|                 // Allows the file to be missing, this will only result in all experimental features disabled. | ||||
|                 ErrorKind::NotFound => { | ||||
|                     debug!("`network.json` not found in dump"); | ||||
|                     None | ||||
|                 } | ||||
|                 _ => return Err(error.into()), | ||||
|             }, | ||||
|         }; | ||||
|         let network = if let Some(network_file) = network_file { | ||||
|             Some(serde_json::from_reader(&*network_file)?) | ||||
|         } else { | ||||
|             None | ||||
|         }; | ||||
|  | ||||
|         Ok(V6Reader { | ||||
|             metadata: serde_json::from_reader(&*meta_file)?, | ||||
|             instance_uid, | ||||
|             tasks: BufReader::new(File::open(dump.path().join("tasks").join("queue.jsonl"))?), | ||||
|             keys: BufReader::new(File::open(dump.path().join("keys.jsonl"))?), | ||||
|             features, | ||||
|             network, | ||||
|             dump, | ||||
|         }) | ||||
|     } | ||||
| @@ -154,6 +174,10 @@ impl V6Reader { | ||||
|     pub fn features(&self) -> Option<RuntimeTogglableFeatures> { | ||||
|         self.features | ||||
|     } | ||||
|  | ||||
|     pub fn network(&self) -> Option<&Network> { | ||||
|         self.network.as_ref() | ||||
|     } | ||||
| } | ||||
|  | ||||
| pub struct UpdateFile { | ||||
|   | ||||
| @@ -4,7 +4,7 @@ use std::path::PathBuf; | ||||
|  | ||||
| use flate2::write::GzEncoder; | ||||
| use flate2::Compression; | ||||
| use meilisearch_types::features::RuntimeTogglableFeatures; | ||||
| use meilisearch_types::features::{Network, RuntimeTogglableFeatures}; | ||||
| use meilisearch_types::keys::Key; | ||||
| use meilisearch_types::settings::{Checked, Settings}; | ||||
| use serde_json::{Map, Value}; | ||||
| @@ -61,6 +61,10 @@ impl DumpWriter { | ||||
|         )?) | ||||
|     } | ||||
|  | ||||
|     pub fn create_network(&self, network: Network) -> Result<()> { | ||||
|         Ok(std::fs::write(self.dir.path().join("network.json"), serde_json::to_string(&network)?)?) | ||||
|     } | ||||
|  | ||||
|     pub fn persist_to(self, mut writer: impl Write) -> Result<()> { | ||||
|         let gz_encoder = GzEncoder::new(&mut writer, Compression::default()); | ||||
|         let mut tar_encoder = tar::Builder::new(gz_encoder); | ||||
|   | ||||
| @@ -219,6 +219,8 @@ impl IndexScheduler { | ||||
|         progress.update_progress(DumpCreationProgress::DumpTheExperimentalFeatures); | ||||
|         let features = self.features().runtime_features(); | ||||
|         dump.create_experimental_features(features)?; | ||||
|         let network = self.network(); | ||||
|         dump.create_network(network)?; | ||||
|  | ||||
|         let dump_uid = started_at.format(format_description!( | ||||
|                     "[year repr:full][month repr:numerical][day padding:zero]-[hour padding:zero][minute padding:zero][second padding:zero][subsecond digits:3]" | ||||
|   | ||||
| @@ -431,10 +431,13 @@ fn import_dump( | ||||
|         keys.push(key); | ||||
|     } | ||||
|  | ||||
|     // 3. Import the runtime features. | ||||
|     // 3. Import the runtime features and network | ||||
|     let features = dump_reader.features()?.unwrap_or_default(); | ||||
|     index_scheduler.put_runtime_features(features)?; | ||||
|  | ||||
|     let network = dump_reader.network()?.cloned().unwrap_or_default(); | ||||
|     index_scheduler.put_network(network)?; | ||||
|  | ||||
|     let indexer_config = index_scheduler.indexer_config(); | ||||
|  | ||||
|     // /!\ The tasks must be imported AFTER importing the indexes or else the scheduler might | ||||
|   | ||||
		Reference in New Issue
	
	Block a user