diff --git a/meilisearch-lib/src/dump/handler.rs b/meilisearch-lib/src/dump/handler.rs index 830bf4d0d..069196451 100644 --- a/meilisearch-lib/src/dump/handler.rs +++ b/meilisearch-lib/src/dump/handler.rs @@ -16,12 +16,14 @@ pub fn generate_uid() -> String { } mod real { - use std::{fs::File, path::PathBuf, sync::Arc}; + use std::path::PathBuf; + use std::sync::Arc; use log::{info, trace}; use meilisearch_auth::AuthController; use milli::heed::Env; use tokio::fs::create_dir_all; + use tokio::io::AsyncWriteExt; use crate::analytics; use crate::compression::to_tar_gz; @@ -78,15 +80,22 @@ mod real { let meta = MetadataVersion::new_v5(self.index_db_size, self.task_store_size); let meta_path = temp_dump_path.join(META_FILE_NAME); - // TODO: blocking - let mut meta_file = File::create(&meta_path)?; - serde_json::to_writer(&mut meta_file, &meta)?; + + let meta_bytes = serde_json::to_vec(&meta)?; + let mut meta_file = tokio::fs::File::create(&meta_path).await?; + meta_file.write_all(&meta_bytes).await?; + analytics::copy_user_id(&self.db_path, &temp_dump_path); create_dir_all(&temp_dump_path.join("indexes")).await?; - // TODO: this is blocking!! - AuthController::dump(&self.db_path, &temp_dump_path)?; + let db_path = self.db_path.clone(); + let temp_dump_path_clone = temp_dump_path.clone(); + tokio::task::spawn_blocking(move || -> Result<()> { + AuthController::dump(db_path, temp_dump_path_clone)?; + Ok(()) + }) + .await??; TaskStore::dump( self.env.clone(), &temp_dump_path,