fix the dump reader process when no instance-uid was specified

This commit is contained in:
Irevoire 2022-10-30 20:00:27 +01:00
parent dd1011ba76
commit fea9fdcd7e
No known key found for this signature in database
GPG Key ID: 7A6A970C96104F1B

View File

@ -1,5 +1,5 @@
use std::fs::{self, File}; use std::fs::{self, File};
use std::io::{BufRead, BufReader}; use std::io::{BufRead, BufReader, ErrorKind};
use std::path::Path; use std::path::Path;
use std::str::FromStr; use std::str::FromStr;
@ -44,7 +44,7 @@ pub type Code = meilisearch_types::error::Code;
pub struct V6Reader { pub struct V6Reader {
dump: TempDir, dump: TempDir,
instance_uid: Uuid, instance_uid: Option<Uuid>,
metadata: Metadata, metadata: Metadata,
tasks: BufReader<File>, tasks: BufReader<File>,
keys: BufReader<File>, keys: BufReader<File>,
@ -53,8 +53,11 @@ pub struct V6Reader {
impl V6Reader { impl V6Reader {
pub fn open(dump: TempDir) -> Result<Self> { pub fn open(dump: TempDir) -> Result<Self> {
let meta_file = fs::read(dump.path().join("metadata.json"))?; let meta_file = fs::read(dump.path().join("metadata.json"))?;
let instance_uid = fs::read_to_string(dump.path().join("instance_uid.uuid"))?; let instance_uid = match fs::read_to_string(dump.path().join("instance_uid.uuid")) {
let instance_uid = Uuid::from_str(&instance_uid)?; Ok(uuid) => Some(Uuid::parse_str(&uuid)?),
Err(e) if e.kind() == ErrorKind::NotFound => None,
Err(e) => return Err(e.into()),
};
Ok(V6Reader { Ok(V6Reader {
metadata: serde_json::from_reader(&*meta_file)?, metadata: serde_json::from_reader(&*meta_file)?,
@ -74,7 +77,7 @@ impl V6Reader {
} }
pub fn instance_uid(&self) -> Result<Option<Uuid>> { pub fn instance_uid(&self) -> Result<Option<Uuid>> {
Ok(Some(self.instance_uid)) Ok(self.instance_uid)
} }
pub fn indexes(&self) -> Result<Box<dyn Iterator<Item = Result<V6IndexReader>> + '_>> { pub fn indexes(&self) -> Result<Box<dyn Iterator<Item = Result<V6IndexReader>> + '_>> {