[pbs-devel] [PATCH v8 proxmox-backup 32/69] file restore: cover split metadata and payload archives

Fabian Grünbichler f.gruenbichler at proxmox.com
Tue Jun 4 10:28:09 CEST 2024


On May 28, 2024 11:42 am, Christian Ebner wrote:
> Attach the payload data archive as input stream to the decoder
> and accessor instances for split archives.
> Allows to restore contents from split archives via the
> `proxmox-file-restore extract` command, by passing the metadata
> archive name.
> 
> Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
> ---
> changes since version 7:
> - no changes
> 
> changes since version 6:
> - s/get_local_pxar_reader/get_remote_pxar_reader
> - adapt to PxarVariant pxar interface
> 
>  proxmox-file-restore/src/main.rs | 22 +++++++++++++++++++---
>  1 file changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/proxmox-file-restore/src/main.rs b/proxmox-file-restore/src/main.rs
> index c9a545677..0de2b47e6 100644
> --- a/proxmox-file-restore/src/main.rs
> +++ b/proxmox-file-restore/src/main.rs
> @@ -470,9 +470,25 @@ async fn extract(
>  
>      match path {
>          ExtractPath::Pxar(archive_name, path) => {
> -            let (reader, archive_size) =
> -                get_remote_pxar_reader(&archive_name, client, &manifest, crypt_config).await?;
> -            let decoder = Accessor::new(pxar::PxarVariant::Unified(reader), archive_size).await?;
> +            let (reader, archive_size) = get_remote_pxar_reader(
> +                &archive_name,
> +                client.clone(),
> +                &manifest,
> +                crypt_config.clone(),
> +            )
> +            .await?;
> +
> +            let reader = if let Some(archive_base_name) = archive_name.strip_suffix(".mpxar.didx") {
> +                let payload_archive_name = format!("{archive_base_name}.ppxar.didx");
> +                let (payload_reader, payload_size) =
> +                    get_remote_pxar_reader(&payload_archive_name, client, &manifest, crypt_config)
> +                        .await?;
> +                pxar::PxarVariant::Split(reader, (payload_reader, payload_size))
> +            } else {
> +                pxar::PxarVariant::Unified(reader)
> +            };

same here, this could use get_pxar_archive_names if it were accessible,
e.g. via pbs-client

> +            let decoder = Accessor::new(reader, archive_size).await?;
> +
>              extract_to_target(decoder, &path, target, format, zstd).await?;
>          }
>          ExtractPath::VM(file, path) => {
> -- 
> 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