Make sure to flush + add some error contexts
This commit is contained in:
parent
50ff9bb36a
commit
c9d64b2962
|
@ -132,7 +132,12 @@ pub fn prune_with_retention_policy(
|
||||||
}
|
}
|
||||||
|
|
||||||
for to_remove in pointers_to_remove {
|
for to_remove in pointers_to_remove {
|
||||||
remove_pointer_safely(&pile, &to_remove)?;
|
let res = remove_pointer_safely(&pile, &to_remove).context("removing prunable pointers");
|
||||||
|
|
||||||
|
pile.flush()
|
||||||
|
.context("flushing pile after removing pointers")?;
|
||||||
|
|
||||||
|
res?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use crate::commands::{fully_integrate_pointer_node, retrieve_tree_node, store_tree_node};
|
use crate::commands::{fully_integrate_pointer_node, retrieve_tree_node, store_tree_node};
|
||||||
use crate::pile::{Pile, RawPile};
|
use crate::pile::{Pile, RawPile};
|
||||||
use crate::tree::{differentiate_node_in_place, integrate_node_in_place};
|
use crate::tree::{differentiate_node_in_place, integrate_node_in_place};
|
||||||
use anyhow::anyhow;
|
use anyhow::{anyhow, Context};
|
||||||
use log::info;
|
use log::info;
|
||||||
|
|
||||||
pub mod checking;
|
pub mod checking;
|
||||||
|
@ -15,10 +15,12 @@ pub fn remove_pointer_safely<P: RawPile>(pile: &Pile<P>, name: &str) -> anyhow::
|
||||||
let mut this_pointer = pile
|
let mut this_pointer = pile
|
||||||
.read_pointer(name)?
|
.read_pointer(name)?
|
||||||
.ok_or_else(|| anyhow!("Pointer {:?} does not exist so can not be deleted.", name))?;
|
.ok_or_else(|| anyhow!("Pointer {:?} does not exist so can not be deleted.", name))?;
|
||||||
let mut this_node = retrieve_tree_node(&pile, this_pointer.chunk_ref.clone())?;
|
let mut this_node = retrieve_tree_node(&pile, this_pointer.chunk_ref.clone())
|
||||||
|
.context("retrieving 'this' node")?;
|
||||||
|
|
||||||
let new_parent_name = this_pointer.parent_pointer.clone();
|
let new_parent_name = this_pointer.parent_pointer.clone();
|
||||||
fully_integrate_pointer_node(pile, &mut this_node.node, &mut this_pointer)?;
|
fully_integrate_pointer_node(pile, &mut this_node.node, &mut this_pointer)
|
||||||
|
.context("integrating new parent")?;
|
||||||
|
|
||||||
let new_parent = if let Some(ref new_parent_name) = new_parent_name {
|
let new_parent = if let Some(ref new_parent_name) = new_parent_name {
|
||||||
let mut new_parent_pointer = pile
|
let mut new_parent_pointer = pile
|
||||||
|
@ -62,6 +64,10 @@ pub fn remove_pointer_safely<P: RawPile>(pile: &Pile<P>, name: &str) -> anyhow::
|
||||||
pointer_data.chunk_ref = new_chunk_ref;
|
pointer_data.chunk_ref = new_chunk_ref;
|
||||||
// write the pointer back.
|
// write the pointer back.
|
||||||
pile.write_pointer(pointer.as_str(), &pointer_data)?;
|
pile.write_pointer(pointer.as_str(), &pointer_data)?;
|
||||||
|
|
||||||
|
// we must flush chunks before deleting the pointer
|
||||||
|
pile.flush()
|
||||||
|
.context("flushing after writing pointer back")?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue