block/manager.rs: In is_block_compressed - check which compression_level

is configured on a node and check for raw block first if compression is
disabled (to help reduce syscalls during a scrub).
This commit is contained in:
Jonathan Davies 2023-05-08 18:57:10 +01:00 committed by networkException
parent ee165e56d2
commit a0900a8943
Signed by: networkException
GPG key ID: E3877443AE684391

View file

@ -600,13 +600,33 @@ impl BlockManager {
/// Utility: check if block is stored compressed. Error if block is not stored
async fn is_block_compressed(&self, hash: &Hash) -> Result<bool, Error> {
let mut path = self.block_path(hash);
// If compression is disabled on node - check for the raw block
// 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);
}
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)
}
}
}
async fn lock_mutate(&self, hash: &Hash) -> MutexGuard<'_, BlockManagerLocked> {
let tracer = opentelemetry::global::tracer("garage");