[pbs-devel] [PATCH proxmox-backup v3 03/23] api/datastore: move snapshot deletion into dedicated datastore helper

Christian Ebner c.ebner at proxmox.com
Wed Nov 5 13:22:13 CET 2025


In an effort to move all datastore backend related logic to the
datastore itself.

Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
---
changes since version 2:
- no changes

 pbs-datastore/src/datastore.rs |  9 +++++++++
 src/api2/admin/datastore.rs    | 25 ++++++++-----------------
 2 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/pbs-datastore/src/datastore.rs b/pbs-datastore/src/datastore.rs
index 45f315aeb..46600a88c 100644
--- a/pbs-datastore/src/datastore.rs
+++ b/pbs-datastore/src/datastore.rs
@@ -2444,4 +2444,13 @@ impl DataStore {
             .context("failed to replace group notes file")?;
         Ok(())
     }
+
+    /// Delete a backup snapshot from the datastore.
+    /// Acquires exclusive lock on the backup snapshot.
+    pub fn delete_snapshot(self: &Arc<Self>, snapshot: &BackupDir) -> Result<(), Error> {
+        let backend = self.backend().context("failed to get backend")?;
+        // acquires exclusive lock on snapshot before removal
+        snapshot.destroy(false, &backend)?;
+        Ok(())
+    }
 }
diff --git a/src/api2/admin/datastore.rs b/src/api2/admin/datastore.rs
index 131cdae51..763440df9 100644
--- a/src/api2/admin/datastore.rs
+++ b/src/api2/admin/datastore.rs
@@ -378,9 +378,9 @@ pub async fn delete_snapshot(
         )?;
 
         let snapshot = datastore.backup_dir(ns, backup_dir)?;
-
-        snapshot.destroy(false, &datastore.backend()?)?;
-
+        datastore
+            .delete_snapshot(&snapshot)
+            .map_err(|err| format_err!("failed to delete snapshot - {err:#?}"))?;
         Ok(Value::Null)
     })
     .await?
@@ -986,21 +986,12 @@ pub fn prune(
             });
 
             if !keep {
-                match datastore.backend() {
-                    Ok(backend) => {
-                        if let Err(err) = backup_dir.destroy(false, &backend) {
-                            warn!(
-                                "failed to remove dir {:?}: {}",
-                                backup_dir.relative_path(),
-                                err,
-                            );
-                        }
-                    }
-                    Err(err) => warn!(
-                        "failed to remove dir {:?}: {err}",
+                if let Err(err) = datastore.delete_snapshot(backup_dir) {
+                    warn!(
+                        "failed to remove dir {:?}: {err:#?}",
                         backup_dir.relative_path()
-                    ),
-                };
+                    );
+                }
             }
         }
         prune_result
-- 
2.47.3





More information about the pbs-devel mailing list