[pbs-devel] [PATCH v6 proxmox-backup 31/65] file restore: cover split metadata and payload archives

Dominik Csapak d.csapak at proxmox.com
Tue May 21 15:25:35 CEST 2024


On 5/14/24 12:33, 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>
> ---
>   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 8a11cff65..36a988708 100644
> --- a/proxmox-file-restore/src/main.rs
> +++ b/proxmox-file-restore/src/main.rs
> @@ -477,9 +477,25 @@ async fn extract(
>   
>       match path {
>           ExtractPath::Pxar(archive_name, path) => {
> -            let (reader, archive_size) =
> -                get_local_pxar_reader(&archive_name, client, &manifest, crypt_config).await?;
> -            let decoder = Accessor::new(reader, archive_size, None).await?;
> +            let (reader, archive_size) = get_local_pxar_reader(
> +                &archive_name,
> +                client.clone(),
> +                &manifest,
> +                crypt_config.clone(),
> +            )
> +            .await?;
> +
> +            let decoder = 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_local_pxar_reader(&payload_archive_name, client, &manifest, crypt_config)
> +                        .await?;
> +                Accessor::new(reader, archive_size, Some((payload_reader, payload_size))).await?
> +            } else {
> +                Accessor::new(reader, archive_size, None).await?
> +            };
> +

similar refactor potential as with 27/65 only this time it has to be a left as an if/else since
we cannot await in a 'map()'

but imho i'd like it better nonetheless if we call Accessor::new only in one place

>               extract_to_target(decoder, &path, target, format, zstd).await?;
>           }
>           ExtractPath::VM(file, path) => {





More information about the pbs-devel mailing list