diff options
author | Jonathan Davies <jpds@protonmail.com> | 2023-05-08 18:57:10 +0100 |
---|---|---|
committer | Jonathan Davies <jpds@protonmail.com> | 2023-05-09 10:28:19 +0100 |
commit | 9c788059e2335fb9d1a145ce3b6a64070a54a202 (patch) | |
tree | f4d80a29ec360945d2a859b7a1453f06097b75f5 | |
parent | 1ecd88c01f0857139921214a264128e5639e31db (diff) | |
download | garage-9c788059e2335fb9d1a145ce3b6a64070a54a202.tar.gz garage-9c788059e2335fb9d1a145ce3b6a64070a54a202.zip |
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).
-rw-r--r-- | src/block/manager.rs | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/src/block/manager.rs b/src/block/manager.rs index 26278974..3ece9a8a 100644 --- a/src/block/manager.rs +++ b/src/block/manager.rs @@ -600,12 +600,32 @@ 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); - path.set_extension("zst"); - if fs::metadata(&path).await.is_ok() { - return Ok(true); + + // 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) + } } - path.set_extension(""); - fs::metadata(&path).await.map(|_| false).map_err(Into::into) } async fn lock_mutate(&self, hash: &Hash) -> MutexGuard<'_, BlockManagerLocked> { |