Fix #235 sumtree size double-counting rm log
This commit is contained in:
@@ -383,10 +383,9 @@ where
|
||||
/// sync'd size.
|
||||
pub fn unpruned_size(&self) -> io::Result<u64> {
|
||||
let total_shift = self.pruned_nodes.get_shift(::std::u64::MAX).unwrap();
|
||||
let rm_len = self.remove_log.len() as u64;
|
||||
let record_len = 32 + T::sum_len() as u64;
|
||||
let sz = self.hashsum_file.size()?;
|
||||
Ok(sz / record_len + rm_len + total_shift)
|
||||
Ok(sz / record_len + total_shift)
|
||||
}
|
||||
|
||||
/// Syncs all files to disk. A call to sync is required to ensure all the
|
||||
|
||||
@@ -129,6 +129,7 @@ fn sumtree_reload() {
|
||||
backend.sync().unwrap();
|
||||
backend.check_compact(1).unwrap();
|
||||
backend.sync().unwrap();
|
||||
assert_eq!(backend.unpruned_size().unwrap(), mmr_size);
|
||||
|
||||
// prune some more to get rm log data
|
||||
{
|
||||
@@ -136,11 +137,13 @@ fn sumtree_reload() {
|
||||
pmmr.prune(5, 1).unwrap();
|
||||
}
|
||||
backend.sync().unwrap();
|
||||
assert_eq!(backend.unpruned_size().unwrap(), mmr_size);
|
||||
}
|
||||
|
||||
// create a new backend and check everything is kosher
|
||||
{
|
||||
let mut backend = store::sumtree::PMMRBackend::new(data_dir).unwrap();
|
||||
assert_eq!(backend.unpruned_size().unwrap(), mmr_size);
|
||||
{
|
||||
let pmmr = PMMR::at(&mut backend, mmr_size);
|
||||
assert_eq!(root, pmmr.root());
|
||||
|
||||
Reference in New Issue
Block a user