[pbs-devel] [RFC proxmox-backup 13/24] api: backup: add ignore-previous flag to backup endpoint

Christian Ebner c.ebner at proxmox.com
Mon Jul 15 12:15:51 CEST 2024


By setting the optional `ignore-previous` endpoint, the previous
backup in the group is disregarded. This will be used when pushing
backups to a target, where monotonic increase of the backup time
cannot be guaranteed.

Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
---
 examples/upload-speed.rs               | 1 +
 pbs-client/src/backup_writer.rs        | 4 +++-
 proxmox-backup-client/src/benchmark.rs | 1 +
 proxmox-backup-client/src/main.rs      | 1 +
 src/api2/backup/mod.rs                 | 6 +++++-
 5 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/examples/upload-speed.rs b/examples/upload-speed.rs
index e4b570ec5..8a6594a47 100644
--- a/examples/upload-speed.rs
+++ b/examples/upload-speed.rs
@@ -25,6 +25,7 @@ async fn upload_speed() -> Result<f64, Error> {
         &(BackupType::Host, "speedtest".to_string(), backup_time).into(),
         false,
         true,
+        false,
     )
     .await?;
 
diff --git a/pbs-client/src/backup_writer.rs b/pbs-client/src/backup_writer.rs
index e5d217608..8a148cb07 100644
--- a/pbs-client/src/backup_writer.rs
+++ b/pbs-client/src/backup_writer.rs
@@ -102,6 +102,7 @@ impl BackupWriter {
         backup: &BackupDir,
         debug: bool,
         benchmark: bool,
+        ignore_previous: bool,
     ) -> Result<Arc<BackupWriter>, Error> {
         let mut param = json!({
             "backup-type": backup.ty(),
@@ -109,7 +110,8 @@ impl BackupWriter {
             "backup-time": backup.time,
             "store": datastore,
             "debug": debug,
-            "benchmark": benchmark
+            "benchmark": benchmark,
+            "ignore-previous": ignore_previous,
         });
 
         if !ns.is_root() {
diff --git a/proxmox-backup-client/src/benchmark.rs b/proxmox-backup-client/src/benchmark.rs
index 1262fb46d..f4b084d8d 100644
--- a/proxmox-backup-client/src/benchmark.rs
+++ b/proxmox-backup-client/src/benchmark.rs
@@ -236,6 +236,7 @@ async fn test_upload_speed(
         &(BackupType::Host, "benchmark".to_string(), backup_time).into(),
         false,
         true,
+        false,
     )
     .await?;
 
diff --git a/proxmox-backup-client/src/main.rs b/proxmox-backup-client/src/main.rs
index 6a7d09047..e9d00a223 100644
--- a/proxmox-backup-client/src/main.rs
+++ b/proxmox-backup-client/src/main.rs
@@ -963,6 +963,7 @@ async fn create_backup(
         &snapshot,
         true,
         false,
+        false,
     )
     .await?;
 
diff --git a/src/api2/backup/mod.rs b/src/api2/backup/mod.rs
index ea0d0292e..c7d402ed0 100644
--- a/src/api2/backup/mod.rs
+++ b/src/api2/backup/mod.rs
@@ -52,6 +52,7 @@ pub const API_METHOD_UPGRADE_BACKUP: ApiMethod = ApiMethod::new(
             ("backup-time", false, &BACKUP_TIME_SCHEMA),
             ("debug", true, &BooleanSchema::new("Enable verbose debug logging.").schema()),
             ("benchmark", true, &BooleanSchema::new("Job is a benchmark (do not keep data).").schema()),
+            ("ignore-previous", true, &BooleanSchema::new("Do not lookup previous snapshot.").schema()),
         ]),
     )
 ).access(
@@ -78,6 +79,7 @@ fn upgrade_to_backup_protocol(
     async move {
         let debug = param["debug"].as_bool().unwrap_or(false);
         let benchmark = param["benchmark"].as_bool().unwrap_or(false);
+        let ignore_previous = param["ignore-previous"].as_bool().unwrap_or(false);
 
         let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
 
@@ -155,7 +157,7 @@ fn upgrade_to_backup_protocol(
             bail!("backup owner check failed ({} != {})", auth_id, owner);
         }
 
-        let last_backup = {
+        let last_backup = if !ignore_previous {
             let info = backup_group.last_backup(true).unwrap_or(None);
             if let Some(info) = info {
                 let (manifest, _) = info.backup_dir.load_manifest()?;
@@ -173,6 +175,8 @@ fn upgrade_to_backup_protocol(
             } else {
                 None
             }
+        } else {
+            None
         };
 
         let backup_dir = backup_group.backup_dir(backup_dir_arg.time)?;
-- 
2.39.2





More information about the pbs-devel mailing list