Add context when returning an error

This commit is contained in:
ManyTheFish 2024-12-11 09:54:34 +01:00
parent 479607e5dd
commit c614d0dd35

@ -27,24 +27,37 @@ pub fn v1_11_to_v1_12(db_path: &Path) -> anyhow::Result<()> {
/// 5) Persist the tmp file replacing the old update file. /// 5) Persist the tmp file replacing the old update file.
fn convert_update_files(db_path: &Path) -> anyhow::Result<()> { fn convert_update_files(db_path: &Path) -> anyhow::Result<()> {
let update_files_dir_path = db_path.join("update_files"); let update_files_dir_path = db_path.join("update_files");
let file_store = FileStore::new(&update_files_dir_path)?; let file_store = FileStore::new(&update_files_dir_path).with_context(|| {
format!("while creating file store for update files dir {update_files_dir_path:?}")
})?;
for uuid in file_store.all_uuids()? { for uuid in file_store.all_uuids().context("while retrieving uuids from file store")? {
let uuid = uuid?; let uuid = uuid.context("while retrieving uuid from file store")?;
let update_file_path = file_store.get_update_path(uuid); let update_file_path = file_store.get_update_path(uuid);
let update_file = file_store.get_update(uuid)?; let update_file = file_store
.get_update(uuid)
.with_context(|| format!("while getting update file for uuid {uuid:?}"))?;
let mut file = NamedTempFile::new_in(&update_files_dir_path).map(BufWriter::new)?; let mut file =
NamedTempFile::new_in(&update_files_dir_path).map(BufWriter::new).with_context(
|| format!("while creating bufwriter for update file {update_file_path:?}"),
)?;
let reader = DocumentsBatchReader::from_reader(update_file)?; let reader = DocumentsBatchReader::from_reader(update_file).with_context(|| {
format!("while creating documents batch reader for update file {update_file_path:?}")
})?;
let (mut cursor, index) = reader.into_cursor_and_fields_index(); let (mut cursor, index) = reader.into_cursor_and_fields_index();
while let Some(document) = cursor.next_document()? { while let Some(document) = cursor.next_document().with_context(|| {
format!(
"while reading documents from batch reader for update file {update_file_path:?}"
)
})? {
let mut json_document = IndexMap::new(); let mut json_document = IndexMap::new();
for (fid, value) in document { for (fid, value) in document {
let field_name = index let field_name = index
.name(fid) .name(fid)
.with_context(|| format!("while getting field name for fid {fid}"))?; .with_context(|| format!("while getting field name for fid {fid} for update file {update_file_path:?}"))?;
let value: &RawValue = serde_json::from_slice(value)?; let value: &RawValue = serde_json::from_slice(value)?;
json_document.insert(field_name, value); json_document.insert(field_name, value);
} }
@ -52,11 +65,12 @@ fn convert_update_files(db_path: &Path) -> anyhow::Result<()> {
serde_json::to_writer(&mut file, &json_document)?; serde_json::to_writer(&mut file, &json_document)?;
} }
let file = file let file = file.into_inner().map_err(|e| e.into_error()).context(format!(
.into_inner() "while flushing update file bufwriter for update file {update_file_path:?}"
.map_err(|e| e.into_error()) ))?;
.context("while flushing update file bufwriter")?; let _ = file
let _ = file.persist(update_file_path)?; .persist(&update_file_path)
.with_context(|| format!("while persisting update file {update_file_path:?}"))?;
} }
Ok(()) Ok(())