[pbs-devel] [PATCH proxmox-backup v2 5/8] chunk store: refactor chunk extension parsing into dedicated helper

Christian Ebner c.ebner at proxmox.com
Thu Dec 11 16:38:32 CET 2025


Move the chunk filename extension parsing into a dedicated helper.

Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
---
 pbs-datastore/src/chunk_store.rs | 36 ++++++++++++++++++--------------
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/pbs-datastore/src/chunk_store.rs b/pbs-datastore/src/chunk_store.rs
index ad517391d..e05e67dfe 100644
--- a/pbs-datastore/src/chunk_store.rs
+++ b/pbs-datastore/src/chunk_store.rs
@@ -320,22 +320,8 @@ impl ChunkStore {
                             // skip files if they're not a hash
                             let bytes = entry.file_name().to_bytes();
 
-                            if bytes.len() == 64 && bytes.iter().take(64).all(u8::is_ascii_hexdigit)
-                            {
-                                return Some((Ok(entry), percentage, ChunkExt::None));
-                            }
-
-                            if bytes.len() == 64 + ".0.bad".len()
-                                && bytes.iter().take(64).all(u8::is_ascii_hexdigit)
-                            {
-                                let chunk_ext = if bytes.ends_with(b".bad") {
-                                    ChunkExt::Bad
-                                } else if bytes.ends_with(USING_MARKER_FILENAME_EXT.as_bytes()) {
-                                    ChunkExt::UsedMarker
-                                } else {
-                                    continue;
-                                };
-                                return Some((Ok(entry), percentage, chunk_ext));
+                            if let Some(ext) = ChunkExt::from_raw_filename(bytes) {
+                                return Some((Ok(entry), percentage, ext));
                             }
 
                             continue;
@@ -932,6 +918,24 @@ impl ChunkExt {
     fn is_used_marker(&self) -> bool {
         *self == Self::UsedMarker
     }
+
+    fn from_raw_filename(filename: &[u8]) -> Option<Self> {
+        if filename.len() == 64 && filename.iter().take(64).all(u8::is_ascii_hexdigit)
+        {
+            return Some(Self::None);
+        }
+
+        if filename.len() == 64 + ".0.bad".len()
+            && filename.iter().take(64).all(u8::is_ascii_hexdigit)
+        {
+            if filename.ends_with(b".bad") {
+                return Some(Self::Bad)
+            } else if filename.ends_with(USING_MARKER_FILENAME_EXT.as_bytes()) {
+                return Some(Self::UsedMarker)
+            }
+        }
+        None
+    }
 }
 
 #[test]
-- 
2.47.3





More information about the pbs-devel mailing list