From 8f0373b81e1e882240eec95161c054ce0f571607 Mon Sep 17 00:00:00 2001 From: Ignotus Peverell Date: Sat, 4 Nov 2017 13:34:33 -0400 Subject: [PATCH] Fix #235 sumtree size double-counting rm log --- store/src/sumtree.rs | 3 +-- store/tests/sumtree.rs | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/store/src/sumtree.rs b/store/src/sumtree.rs index 2420c808..d3a60d24 100644 --- a/store/src/sumtree.rs +++ b/store/src/sumtree.rs @@ -383,10 +383,9 @@ where /// sync'd size. pub fn unpruned_size(&self) -> io::Result { 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 diff --git a/store/tests/sumtree.rs b/store/tests/sumtree.rs index 310ec02d..d0f2d36c 100644 --- a/store/tests/sumtree.rs +++ b/store/tests/sumtree.rs @@ -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());