diff --git a/src/core/index.rs b/src/core/index.rs index 12ef5e37f..4f93650ba 100644 --- a/src/core/index.rs +++ b/src/core/index.rs @@ -35,12 +35,21 @@ fn load_metas( inventory: &SegmentMetaInventory, ) -> crate::Result { let meta_data = directory.atomic_read(&META_FILEPATH)?; - let meta_string = String::from_utf8_lossy(&meta_data); + let meta_string = String::from_utf8(meta_data).map_err(|_utf8_err| { + error!("Meta data is not valid utf8."); + DataCorruption::new( + META_FILEPATH.to_path_buf(), + format!("Meta file does not contain valid utf8 file."), + ) + })?; IndexMeta::deserialize(&meta_string, &inventory) .map_err(|e| { DataCorruption::new( META_FILEPATH.to_path_buf(), - format!("Meta file cannot be deserialized. {:?}.", e), + format!( + "Meta file cannot be deserialized. {:?}. Content: {:?}", + e, meta_string + ), ) }) .map_err(From::from) diff --git a/src/directory/ram_directory.rs b/src/directory/ram_directory.rs index b3c4d05e5..f5ddcd955 100644 --- a/src/directory/ram_directory.rs +++ b/src/directory/ram_directory.rs @@ -226,13 +226,9 @@ impl Directory for RAMDirectory { ))); let path_buf = PathBuf::from(path); - // Reserve the path to prevent calls to .write() to succeed. - self.fs.write().unwrap().write(path_buf.clone(), &[]); + self.fs.write().unwrap().write(path_buf, data); - let mut vec_writer = VecWriter::new(path_buf, self.clone()); - vec_writer.write_all(data)?; - vec_writer.flush()?; - if path == Path::new(&*META_FILEPATH) { + if path == *META_FILEPATH { let _ = self.fs.write().unwrap().watch_router.broadcast(); } Ok(())