[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