From 0e44d9d30c87e5bf658d4da6aa2e70cdadc8e15b Mon Sep 17 00:00:00 2001 From: Christian Ebner Date: Tue, 20 Feb 2024 15:49:18 +0100 Subject: [PATCH] api: datastore: attach split archive payload chunk reader Attach the payload chunk reader for pxar archives which have been uploaded using split streams for metadata and payload data. Signed-off-by: Christian Ebner --- src/api2/admin/datastore.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/api2/admin/datastore.rs b/src/api2/admin/datastore.rs index af1c12cc..34a9105d 100644 --- a/src/api2/admin/datastore.rs +++ b/src/api2/admin/datastore.rs @@ -1810,10 +1810,20 @@ pub fn pxar_file_download( } } + let (pxar_name, payload_archive_name) = + pbs_client::tools::get_pxar_archive_names(pxar_name, &manifest)?; let (reader, archive_size) = - get_local_pxar_reader(datastore.clone(), &manifest, &backup_dir, pxar_name)?; + get_local_pxar_reader(datastore.clone(), &manifest, &backup_dir, &pxar_name)?; + + let reader = if let Some(payload_archive_name) = payload_archive_name { + let payload_input = + get_local_pxar_reader(datastore, &manifest, &backup_dir, &payload_archive_name)?; + pxar::PxarVariant::Split(reader, payload_input) + } else { + pxar::PxarVariant::Unified(reader) + }; + let decoder = Accessor::new(reader, archive_size).await?; - let decoder = Accessor::new(pxar::PxarVariant::Unified(reader), archive_size).await?; let root = decoder.open_root().await?; let path = OsStr::from_bytes(file_path).to_os_string(); let file = root