From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 57C2C1FF38E for ; Tue, 28 May 2024 11:51:50 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id DC9F8134E3; Tue, 28 May 2024 11:52:11 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Tue, 28 May 2024 11:42:25 +0200 Message-Id: <20240528094303.309806-32-c.ebner@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240528094303.309806-1-c.ebner@proxmox.com> References: <20240528094303.309806-1-c.ebner@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.028 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pbs-devel] [PATCH v8 proxmox-backup 31/69] file restore: factor out getting pxar reader X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" 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 --- changes since version 7: - no changes changes since version 6: - rename from `get_local_pxar_reader` to `get_remote_pxar_reader` 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 61dece97d..c9a545677 100644 --- a/proxmox-file-restore/src/main.rs +++ b/proxmox-file-restore/src/main.rs @@ -35,7 +35,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; @@ -328,6 +328,31 @@ async fn list( Ok(()) } +async fn get_remote_pxar_reader( + archive_name: &str, + client: Arc, + manifest: &BackupManifest, + crypt_config: Option>, +) -> Result<(LocalDynamicReadAt, 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: { @@ -445,21 +470,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_remote_pxar_reader(&archive_name, client, &manifest, crypt_config).await?; let decoder = Accessor::new(pxar::PxarVariant::Unified(reader), archive_size).await?; extract_to_target(decoder, &path, target, format, zstd).await?; } -- 2.39.2 _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel