Fix sumtree size double-counting rm log

This commit is contained in:
Ignotus Peverell 2017-11-04 13:34:33 -04:00
parent 8f78b74d67
commit 8f0373b81e
No known key found for this signature in database
GPG key ID: 99CD25F39F8F8211
2 changed files with 4 additions and 2 deletions

View file

@ -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

View file

@ -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());