[pbs-devel] [PATCH v6 proxmox-backup 30/65] file restore: factor out getting pxar reader
Dominik Csapak
d.csapak at proxmox.com
Tue May 21 15:19:36 CEST 2024
On 5/14/24 12:33, Christian Ebner wrote:
> Factor out the logic to get the pxar reader into a dedicated function
> so it can be reused to get the payload data archive reader instance.
>
> Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
> ---
> proxmox-file-restore/src/main.rs | 44 ++++++++++++++++++++------------
> 1 file changed, 28 insertions(+), 16 deletions(-)
>
> diff --git a/proxmox-file-restore/src/main.rs b/proxmox-file-restore/src/main.rs
> index 685ce34d9..8a11cff65 100644
> --- a/proxmox-file-restore/src/main.rs
> +++ b/proxmox-file-restore/src/main.rs
> @@ -34,7 +34,7 @@ use pbs_client::{BackupReader, BackupRepository, RemoteChunkReader};
> use pbs_datastore::catalog::{ArchiveEntry, CatalogReader, DirEntryAttribute};
> use pbs_datastore::dynamic_index::{BufferedDynamicReader, LocalDynamicReadAt};
> use pbs_datastore::index::IndexFile;
> -use pbs_datastore::CATALOG_NAME;
> +use pbs_datastore::{BackupManifest, CATALOG_NAME};
> use pbs_key_config::decrypt_key;
> use pbs_tools::crypt_config::CryptConfig;
>
> @@ -335,6 +335,31 @@ async fn list(
> Ok(())
> }
>
> +async fn get_local_pxar_reader(
nit: this probably shouldn't be named 'get_local_pxar_reader' since none of it is 'local' ?
also this has now the same name as the function used in the datastore api to download
files from pxar (locally)
probably 'get_remote_pxar_reader' ?
> + archive_name: &str,
> + client: Arc<BackupReader>,
> + manifest: &BackupManifest,
> + crypt_config: Option<Arc<CryptConfig>>,
> +) -> Result<(LocalDynamicReadAt<RemoteChunkReader>, u64), Error> {
> + let index = client
> + .download_dynamic_index(&manifest, &archive_name)
> + .await?;
> + let most_used = index.find_most_used_chunks(8);
> +
> + let file_info = manifest.lookup_file_info(&archive_name)?;
> + let chunk_reader = RemoteChunkReader::new(
> + client.clone(),
> + crypt_config,
> + file_info.chunk_crypt_mode(),
> + most_used,
> + );
> +
> + let reader = BufferedDynamicReader::new(index, chunk_reader);
> + let archive_size = reader.archive_size();
> +
> + Ok((LocalDynamicReadAt::new(reader), archive_size))
> +}
> +
> #[api(
> input: {
> properties: {
> @@ -452,21 +477,8 @@ async fn extract(
>
> match path {
> ExtractPath::Pxar(archive_name, path) => {
> - let file_info = manifest.lookup_file_info(&archive_name)?;
> - let index = client
> - .download_dynamic_index(&manifest, &archive_name)
> - .await?;
> - let most_used = index.find_most_used_chunks(8);
> - let chunk_reader = RemoteChunkReader::new(
> - client.clone(),
> - crypt_config,
> - file_info.chunk_crypt_mode(),
> - most_used,
> - );
> - let reader = BufferedDynamicReader::new(index, chunk_reader);
> -
> - let archive_size = reader.archive_size();
> - let reader = LocalDynamicReadAt::new(reader);
> + let (reader, archive_size) =
> + get_local_pxar_reader(&archive_name, client, &manifest, crypt_config).await?;
> let decoder = Accessor::new(reader, archive_size, None).await?;
> extract_to_target(decoder, &path, target, format, zstd).await?;
> }
More information about the pbs-devel
mailing list