Fix add to resync on incref

This commit is contained in:
Alex Auvolat 2020-04-17 21:14:06 +02:00
parent ace07da7c1
commit f62b54f1df

View File

@ -136,17 +136,18 @@ impl BlockManager {
} }
pub fn block_incref(&self, hash: &Hash) -> Result<(), Error> { pub fn block_incref(&self, hash: &Hash) -> Result<(), Error> {
let new_rc = self.rc.merge(&hash, vec![1])?; let old_rc = self.rc.get(&hash)?;
if new_rc.map(|x| u64_from_bytes(&x[..]) == 0).unwrap_or(true) { self.rc.merge(&hash, vec![1])?;
self.put_to_resync(&hash, BLOCK_RW_TIMEOUT.as_millis() as u64)?; if old_rc.map(|x| u64_from_bytes(&x[..]) == 0).unwrap_or(true) {
self.put_to_resync(&hash, 2 * BLOCK_RW_TIMEOUT.as_millis() as u64)?;
} }
Ok(()) Ok(())
} }
pub fn block_decref(&self, hash: &Hash) -> Result<(), Error> { pub fn block_decref(&self, hash: &Hash) -> Result<(), Error> {
let new_rc = self.rc.merge(&hash, vec![0])?; let new_rc = self.rc.merge(&hash, vec![0])?;
if new_rc.is_none() { if new_rc.map(|x| u64_from_bytes(&x[..]) == 0).unwrap_or(true) {
self.put_to_resync(&hash, 2 * BLOCK_RW_TIMEOUT.as_millis() as u64)?; self.put_to_resync(&hash, BLOCK_RW_TIMEOUT.as_millis() as u64)?;
} }
Ok(()) Ok(())
} }