[pbs-devel] [PATCH proxmox-backup v2 7/8] chunk store: move next bad chunk path generator into dedicated helper
Christian Ebner
c.ebner at proxmox.com
Thu Dec 11 16:38:34 CET 2025
Better encapsulate the logic as this concerns the chunk store and
perpare for placing the logic on bad chunk filename generation into
a single place.
Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
---
pbs-datastore/src/chunk_store.rs | 16 ++++++++++++++++
pbs-datastore/src/datastore.rs | 11 +----------
2 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/pbs-datastore/src/chunk_store.rs b/pbs-datastore/src/chunk_store.rs
index 2ad90757a..f5585d2cb 100644
--- a/pbs-datastore/src/chunk_store.rs
+++ b/pbs-datastore/src/chunk_store.rs
@@ -915,6 +915,22 @@ impl ChunkStore {
})?;
Ok(guard)
}
+
+ /// Generate the next bad chunk file path for given digest. Returns the path as well as the bad
+ /// chunk counter.
+ pub(crate) fn next_bad_chunk_path(&self, digest: &[u8; 32]) -> (PathBuf, usize) {
+ let (mut chunk_path, digest_str) = self.chunk_path(digest);
+ let mut counter = 0;
+ loop {
+ chunk_path.set_file_name(format!("{digest_str}.{counter}.bad"));
+ if chunk_path.exists() && counter < 9 {
+ counter += 1;
+ } else {
+ break;
+ }
+ }
+ (chunk_path, counter)
+ }
}
#[derive(PartialEq)]
diff --git a/pbs-datastore/src/datastore.rs b/pbs-datastore/src/datastore.rs
index 2bab20294..f24a3a056 100644
--- a/pbs-datastore/src/datastore.rs
+++ b/pbs-datastore/src/datastore.rs
@@ -2652,16 +2652,7 @@ impl DataStore {
}
let _lock = self.inner.chunk_store.mutex().lock().unwrap();
- let mut counter = 0;
- let mut new_path = path.clone();
- loop {
- new_path.set_file_name(format!("{digest_str}.{counter}.bad"));
- if new_path.exists() && counter < 9 {
- counter += 1;
- } else {
- break;
- }
- }
+ let (new_path, counter) = self.inner.chunk_store.next_bad_chunk_path(digest);
let result = match std::fs::rename(&path, &new_path) {
Ok(_) => Ok(Some(new_path)),
--
2.47.3
More information about the pbs-devel
mailing list