aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Davies <jpds@protonmail.com>2023-05-08 18:57:10 +0100
committerJonathan Davies <jpds@protonmail.com>2023-05-09 10:28:19 +0100
commit9c788059e2335fb9d1a145ce3b6a64070a54a202 (patch)
treef4d80a29ec360945d2a859b7a1453f06097b75f5
parent1ecd88c01f0857139921214a264128e5639e31db (diff)
downloadgarage-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.rs30
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> {