[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