block/manager.rs: Prioritize raw blocks when no compression configured #566

Merged
lx merged 1 commit from jpds/garage:skip-compressed-blocks-scrub-no-compression into main 2023-05-09 09:39:49 +00:00
Showing only changes of commit 9c788059e2 - Show all commits

View file

@ -600,12 +600,32 @@ impl BlockManager {
/// Utility: check if block is stored compressed. Error if block is not stored /// Utility: check if block is stored compressed. Error if block is not stored
async fn is_block_compressed(&self, hash: &Hash) -> Result<bool, Error> { async fn is_block_compressed(&self, hash: &Hash) -> Result<bool, Error> {
let mut path = self.block_path(hash); let mut path = self.block_path(hash);
path.set_extension("zst");
if fs::metadata(&path).await.is_ok() { // If compression is disabled on node - check for the raw block
return Ok(true); // first and then a compressed one (as compression may have been
// previously enabled).
match self.compression_level {
None => {
if fs::metadata(&path).await.is_ok() {
return Ok(false);
}
jpds marked this conversation as resolved Outdated
Outdated
Review

The true/false values returned also need to be swapped in the case we are checking the non-compressed file first.

The true/false values returned also need to be swapped in the case we are checking the non-compressed file first.
path.set_extension("zst");
fs::metadata(&path).await.map(|_| true).map_err(Into::into)
}
_ => {
path.set_extension("zst");
if fs::metadata(&path).await.is_ok() {
return Ok(true);
}
path.set_extension("");
fs::metadata(&path).await.map(|_| false).map_err(Into::into)
}
} }
path.set_extension("");
fs::metadata(&path).await.map(|_| false).map_err(Into::into)
} }
async fn lock_mutate(&self, hash: &Hash) -> MutexGuard<'_, BlockManagerLocked> { async fn lock_mutate(&self, hash: &Hash) -> MutexGuard<'_, BlockManagerLocked> {