[pbs-devel] [RFC v2 proxmox-backup 31/36] specs: add backup detection mode specification

Fabian Grünbichler f.gruenbichler at proxmox.com
Tue Mar 12 13:17:35 CET 2024


nit: this patch is ordered wrong in the series

On March 5, 2024 10:26 am, Christian Ebner wrote:
> Adds the specification for switching the detection mode used to
> identify regular files which changed since a reference backup run.
> 
> Rather than being a flag selecting the mode, it is possible to pass
> a list of archives for which to use metadata base file change
> detection, allowing to run mixed modes with the same client
> invocation.
> 
> Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
> ---
> changes since version 1:
> - no changes
> 
>  pbs-client/src/backup_specification.rs | 53 ++++++++++++++++++++++++++
>  1 file changed, 53 insertions(+)
> 
> diff --git a/pbs-client/src/backup_specification.rs b/pbs-client/src/backup_specification.rs
> index 619a3a9d..5b33b451 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,50 @@ pub fn parse_backup_specification(value: &str) -> Result<BackupSpecification, Er
>  
>      bail!("unable to parse backup source specification '{}'", value);
>  }
> +
> +/// Mode to detect file changes since last backup run
> +pub enum BackupDetectionMode {
> +    /// Regular mode, re-encode payload data
> +    Data,
> +    /// Compare metadata, reuse payload chunks if metadata unchanged
> +    ///
> +    /// Stores archive names for which to use the metadata mode
> +    Metadata(Vec<String>),

I already had this question in the other patch that uses this, but do we
need this kind of control? wouldn't a third value MetadataNoReuse (name
tbd ;)) to force a "cut" be enough (e.g., if I am either afraid that the
re-use might have bugs, or I want to reset the re-use / chunk
boundaries)?

> +}
> +
> +impl BackupDetectionMode {
> +    /// Check if the selected mode is metadata based file change detection
> +    pub fn is_metadata(&self) -> bool {
> +        match self {
> +            Self::Data => false,
> +            Self::Metadata(_) => true,
> +        }
> +    }
> +
> +    /// List of archive names, for which metadata based file change detection should be used
> +    pub fn metadata_archive_names(&self) -> &[String] {
> +        match self {
> +            Self::Data => &[],
> +            Self::Metadata(ref archives) => archives,
> +        }
> +    }
> +}
> +
> +pub fn parse_backup_detection_mode_specification(
> +    value: &str,
> +) -> Result<BackupDetectionMode, Error> {
> +    match (DETECTION_MODE_REGEX.regex_obj)().captures(value) {
> +        Some(caps) => {
> +            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| s.to_string()).collect();
> +                    BackupDetectionMode::Metadata(archives)
> +                }
> +                _ => bail!("invalid backup detection mode"),
> +            };
> +            Ok(mode)
> +        }
> +        None => bail!("unable to parse backup detection mode specification '{value}'"),
> +    }
> +}
> -- 
> 2.39.2
> 
> 
> 
> _______________________________________________
> pbs-devel mailing list
> pbs-devel at lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
> 
> 
> 




More information about the pbs-devel mailing list