[pbs-devel] [PATCH v3 proxmox-backup 53/58] client: pxar: opt encode cli exclude patterns as CliParams
Fabian Grünbichler
f.gruenbichler at proxmox.com
Fri Apr 5 11:49:25 CEST 2024
Quoting Christian Ebner (2024-03-28 13:37:02)
> Instead of encoding the pxar cli exclude patterns as regular file
> within the root directory of an archive, store this information
> directly after the pxar format version entry in a new pxar cli params
> entry.
>
> This behaviour is however currently exclusive to the archives written
> with format version 2 in a split metadata and payload case.
>
> This is a breaking change for the encoding of new cli exclude
> parameters. Any new exclude parameter will not be added to an already
> present .pxar-cliexclude file, and it will not be created if not
> present.
>
> Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
> ---
> changes since version 2:
> - not present in previous version
>
> pbs-client/src/pxar/create.rs | 25 +++++++++++++++--------
> pbs-client/src/pxar/extract.rs | 3 ++-
> pbs-client/src/pxar/tools.rs | 6 ++++++
> src/tape/file_formats/snapshot_archive.rs | 8 ++++++--
> 4 files changed, 31 insertions(+), 11 deletions(-)
>
> diff --git a/pbs-client/src/pxar/create.rs b/pbs-client/src/pxar/create.rs
> index 461509c39..5f2270fe8 100644
> --- a/pbs-client/src/pxar/create.rs
> +++ b/pbs-client/src/pxar/create.rs
> @@ -343,13 +343,6 @@ where
> set.insert(stat.st_dev);
> }
>
> - let mut encoder = Encoder::new(
> - &mut writers.writer,
> - &metadata,
> - writers.payload_writer.as_mut(),
> - )
> - .await?;
> -
> let mut patterns = options.patterns;
>
> if options.skip_lost_and_found {
> @@ -359,6 +352,14 @@ where
> MatchType::Exclude,
> )?);
> }
> +
> + let cli_params_content = generate_pxar_excludes_cli(&patterns[..]);
> + let cli_params = if options.previous_ref.is_some() {
> + Some(cli_params_content.as_slice())
> + } else {
> + None
> + };
> +
> let (previous_payload_index, previous_metadata_accessor) =
> if let Some(refs) = options.previous_ref {
> (
> @@ -369,6 +370,14 @@ where
> (None, None)
> };
>
> + let mut encoder = Encoder::new(
> + &mut writers.writer,
> + &metadata,
> + writers.payload_writer.as_mut(),
> + cli_params,
> + )
> + .await?;
> +
> let mut archiver = Archiver {
> feature_flags,
> fs_feature_flags,
> @@ -454,7 +463,7 @@ impl Archiver {
>
> let mut file_list = self.generate_directory_file_list(&mut dir, is_root)?;
>
> - if is_root && old_patterns_count > 0 {
> + if is_root && old_patterns_count > 0 && previous_metadata_accessor.is_none() {
> file_list.push(FileListEntry {
> name: CString::new(".pxarexclude-cli").unwrap(),
> path: PathBuf::new(),
> diff --git a/pbs-client/src/pxar/extract.rs b/pbs-client/src/pxar/extract.rs
> index 56f8d7adc..46ff8fc80 100644
> --- a/pbs-client/src/pxar/extract.rs
> +++ b/pbs-client/src/pxar/extract.rs
> @@ -267,7 +267,8 @@ where
> };
>
> let extract_res = match (did_match, entry.kind()) {
> - (_, EntryKind::Version(_)) => Ok(()),
> + (_, EntryKind::Version(_version)) => Ok(()),
> + (_, EntryKind::CliParams(_data)) => Ok(()),
> (_, EntryKind::Directory) => {
> self.callback(entry.path());
>
> diff --git a/pbs-client/src/pxar/tools.rs b/pbs-client/src/pxar/tools.rs
> index 4e9bd5b60..478acdc0f 100644
> --- a/pbs-client/src/pxar/tools.rs
> +++ b/pbs-client/src/pxar/tools.rs
> @@ -173,6 +173,12 @@ pub fn format_multi_line_entry(entry: &Entry) -> String {
>
> let (size, link, type_name, payload_offset) = match entry.kind() {
> EntryKind::Version(version) => (format!("{version:?}"), String::new(), "version", None),
> + EntryKind::CliParams(params) => (
> + "0".to_string(),
> + format!(" -> {:?}", params.as_os_str()),
> + "symlink",
> + None,
this seems wrong ;)
> + ),
> EntryKind::File {
> size,
> payload_offset,
> diff --git a/src/tape/file_formats/snapshot_archive.rs b/src/tape/file_formats/snapshot_archive.rs
> index 43d1cf9c3..7e052919b 100644
> --- a/src/tape/file_formats/snapshot_archive.rs
> +++ b/src/tape/file_formats/snapshot_archive.rs
> @@ -58,8 +58,12 @@ pub fn tape_write_snapshot_archive<'a>(
> ));
> }
>
> - let mut encoder =
> - pxar::encoder::sync::Encoder::new(PxarTapeWriter::new(writer), &root_metadata, None)?;
> + let mut encoder = pxar::encoder::sync::Encoder::new(
> + PxarTapeWriter::new(writer),
> + &root_metadata,
> + None,
> + None,
> + )?;
>
> for filename in file_list.iter() {
> let mut file = snapshot_reader.open_file(filename).map_err(|err| {
> --
> 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