[pbs-devel] [PATCH proxmox-backup 4/5] pull: refactor source snapshot list filtering logic

Christian Ebner c.ebner at proxmox.com
Fri May 16 13:54:28 CEST 2025


In preparation for filter based on the snapshot's verify and
encryption state before applying the transfer last cutoff.

This will allow to correctly use the transfer last filter on the
correspondingly prefiltered items only.

Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
---
 src/server/pull.rs | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/src/server/pull.rs b/src/server/pull.rs
index 832ee1b85..53de74f19 100644
--- a/src/server/pull.rs
+++ b/src/server/pull.rs
@@ -547,13 +547,6 @@ async fn pull_group(
         .await?;
     raw_list.sort_unstable_by(|a, b| a.backup.time.cmp(&b.backup.time));
 
-    let total_amount = raw_list.len();
-
-    let cutoff = params
-        .transfer_last
-        .map(|count| total_amount.saturating_sub(count))
-        .unwrap_or_default();
-
     let target_ns = source_namespace.map_prefix(&params.source.get_ns(), &params.target.ns)?;
 
     let mut source_snapshots = HashSet::new();
@@ -567,8 +560,7 @@ async fn pull_group(
     // Also stores if the snapshot is corrupt (verification job failed)
     let list: Vec<(BackupDir, bool)> = raw_list
         .into_iter()
-        .enumerate()
-        .filter_map(|(pos, item)| {
+        .filter_map(|item| {
             let dir = item.backup;
 
             source_snapshots.insert(dir.time);
@@ -600,6 +592,20 @@ async fn pull_group(
                     }
                 }
             }
+            Some((dir, false))
+        })
+        .collect();
+
+    let total_amount = list.len();
+    let cutoff = params
+        .transfer_last
+        .map(|count| total_amount.saturating_sub(count))
+        .unwrap_or_default();
+
+    let list: Vec<(BackupDir, bool)> = list
+        .into_iter()
+        .enumerate()
+        .filter_map(|(pos, (dir, verified))| {
             // Note: the snapshot represented by `last_sync_time` might be missing its backup log
             // or post-backup verification state if those were not yet available during the last
             // sync run, always resync it
@@ -611,7 +617,7 @@ async fn pull_group(
                 transfer_last_skip_info.update(dir.time);
                 return None;
             }
-            Some((dir, false))
+            Some((dir, verified))
         })
         .collect();
 
-- 
2.39.5





More information about the pbs-devel mailing list