[pbs-devel] [PATCH v4 proxmox-backup 20/26] fix #3174: specs: add backup detection mode specification

Christian Ebner c.ebner at proxmox.com
Thu Nov 9 19:46:08 CET 2023


Adds the specification for switching the detection mode used to
identify regular files which changed since a reference backup run.

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

Changes since version 2:
- use backup specification instead of schema. The intention is to allow
  to not only switch metadata based file change detection on or off, but
  rather to also allow to specify for which archives which method should
  be used.

Changes since version 1:
- not present in version 1

 pbs-client/src/backup_specification.rs | 30 ++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/pbs-client/src/backup_specification.rs b/pbs-client/src/backup_specification.rs
index 619a3a9d..3f9e6d02 100644
--- a/pbs-client/src/backup_specification.rs
+++ b/pbs-client/src/backup_specification.rs
@@ -4,6 +4,7 @@ use proxmox_schema::*;
 
 const_regex! {
     BACKUPSPEC_REGEX = r"^([a-zA-Z0-9_-]+\.(pxar|img|conf|log)):(.+)$";
+    DETECTION_MODE_REGEX = r"^(data|metadata(:[a-zA-Z0-9_-]+\.pxar)*)$";
 }
 
 pub const BACKUP_SOURCE_SCHEMA: Schema =
@@ -11,6 +12,11 @@ pub const BACKUP_SOURCE_SCHEMA: Schema =
         .format(&ApiStringFormat::Pattern(&BACKUPSPEC_REGEX))
         .schema();
 
+pub const BACKUP_DETECTION_MODE_SPEC: Schema =
+    StringSchema::new("Backup source specification ([data|metadata(:<label>,...)]).")
+        .format(&ApiStringFormat::Pattern(&DETECTION_MODE_REGEX))
+        .schema();
+
 pub enum BackupSpecificationType {
     PXAR,
     IMAGE,
@@ -45,3 +51,27 @@ pub fn parse_backup_specification(value: &str) -> Result<BackupSpecification, Er
 
     bail!("unable to parse backup source specification '{}'", value);
 }
+
+pub enum BackupDetectionMode {
+    Data,
+    Metadata(Vec<String>),
+}
+
+pub fn parse_backup_detection_mode_specification(
+    value: &str,
+) -> Result<BackupDetectionMode, Error> {
+    if let Some(caps) = (DETECTION_MODE_REGEX.regex_obj)().captures(value) {
+        let mode = match caps.get(1).unwrap().as_str() {
+            "data" => BackupDetectionMode::Data,
+            ty if ty.starts_with("metadata") => {
+                let archives = ty.split(':').skip(1).map(|s| format!("{s}.didx")).collect();
+                BackupDetectionMode::Metadata(archives)
+            },
+            _ => bail!("invalid backup detection mode"),
+        };
+
+        return Ok(mode);
+    }
+
+    bail!("unable to parse backup detection mode specification '{}'", value);
+}
-- 
2.39.2






More information about the pbs-devel mailing list