[pbs-devel] [PATCH proxmox-backup 3/4] chunk store: invert chunk filename checks in chunk store iterator
Christian Ebner
c.ebner at proxmox.com
Wed Nov 26 14:34:18 CET 2025
Optimizes the chunk filename check towards regular chunk files by
explicitley checking for the correct length.
While the check for ascii hexdigits needs to be stated twice, this
avoids to check for the `.bad` extension if the chunk filename did
already match the expected length.
This will also help to better distinguish bad chunks and chunks
used markers for s3 datastores in subsequent changes.
Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
---
pbs-datastore/src/chunk_store.rs | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/pbs-datastore/src/chunk_store.rs b/pbs-datastore/src/chunk_store.rs
index a5e5f6261..7980938ad 100644
--- a/pbs-datastore/src/chunk_store.rs
+++ b/pbs-datastore/src/chunk_store.rs
@@ -315,15 +315,20 @@ impl ChunkStore {
Some(Ok(entry)) => {
// skip files if they're not a hash
let bytes = entry.file_name().to_bytes();
- if bytes.len() != 64 && bytes.len() != 64 + ".0.bad".len() {
- continue;
+
+ if bytes.len() == 64 && bytes.iter().take(64).all(u8::is_ascii_hexdigit)
+ {
+ return Some((Ok(entry), percentage, false));
}
- if !bytes.iter().take(64).all(u8::is_ascii_hexdigit) {
- continue;
+
+ if bytes.len() == 64 + ".0.bad".len()
+ && bytes.iter().take(64).all(u8::is_ascii_hexdigit)
+ {
+ let bad = bytes.ends_with(b".bad");
+ return Some((Ok(entry), percentage, bad));
}
- let bad = bytes.ends_with(b".bad");
- return Some((Ok(entry), percentage, bad));
+ continue;
}
Some(Err(err)) => {
// stop after first error
--
2.47.3
More information about the pbs-devel
mailing list