From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 436061FF2D6 for ; Mon, 22 Jul 2024 12:30:20 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D3A653055A; Mon, 22 Jul 2024 12:30:51 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Mon, 22 Jul 2024 12:30:28 +0200 Message-Id: <20240722103034.343303-2-c.ebner@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240722103034.343303-1-c.ebner@proxmox.com> References: <20240722103034.343303-1-c.ebner@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.021 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 Subject: [pbs-devel] [PATCH v2 proxmox-backup 1/7] client: make helper to get remote pxar reader reusable 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" Move the get_remote_pxar_reader helper function so it can be reused also for getting the metadata archive reader instance for the catalog dump. No functional changes. Signed-off-by: Christian Ebner --- changes since version 1: - no functional changes, only rebased onto origin/master pbs-client/src/tools/mod.rs | 32 ++++++++++++++++++++++++++++++-- proxmox-file-restore/src/main.rs | 31 +++---------------------------- 2 files changed, 33 insertions(+), 30 deletions(-) diff --git a/pbs-client/src/tools/mod.rs b/pbs-client/src/tools/mod.rs index 772cc1263..8c634ba76 100644 --- a/pbs-client/src/tools/mod.rs +++ b/pbs-client/src/tools/mod.rs @@ -9,7 +9,7 @@ use std::os::unix::fs::OpenOptionsExt; use std::os::unix::io::FromRawFd; use std::path::PathBuf; use std::process::Command; -use std::sync::OnceLock; +use std::sync::{Arc, OnceLock}; use anyhow::{bail, format_err, Context, Error}; use serde_json::{json, Value}; @@ -22,13 +22,16 @@ use proxmox_sys::fs::file_get_json; use pbs_api_types::{Authid, BackupNamespace, RateLimitConfig, UserWithTokens, BACKUP_REPO_URL}; use pbs_datastore::catalog::{ArchiveEntry, DirEntryAttribute}; +use pbs_datastore::dynamic_index::{BufferedDynamicReader, LocalDynamicReadAt}; +use pbs_datastore::index::IndexFile; use pbs_datastore::BackupManifest; +use pbs_tools::crypt_config::CryptConfig; use pxar::accessor::aio::Accessor; use pxar::accessor::ReadAt; use pxar::format::SignedDuration; use pxar::{mode, EntryKind}; -use crate::{BackupRepository, HttpClient, HttpClientOptions}; +use crate::{BackupReader, BackupRepository, HttpClient, HttpClientOptions, RemoteChunkReader}; pub mod key_source; @@ -555,6 +558,31 @@ pub fn place_xdg_file( .with_context(|| format!("failed to place {} in xdg home", description)) } +pub 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)) +} + pub fn get_pxar_archive_names( archive_name: &str, manifest: &BackupManifest, diff --git a/proxmox-file-restore/src/main.rs b/proxmox-file-restore/src/main.rs index 69d811fc1..db4ccae08 100644 --- a/proxmox-file-restore/src/main.rs +++ b/proxmox-file-restore/src/main.rs @@ -24,7 +24,7 @@ use pbs_api_types::{file_restore::FileRestoreFormat, BackupDir, BackupNamespace, use pbs_client::pxar::{create_tar, create_zip, extract_sub_dir, extract_sub_dir_seq}; use pbs_client::tools::{ complete_group_or_snapshot, complete_repository, connect, extract_repository_from_value, - has_pxar_filename_extension, + get_remote_pxar_reader, has_pxar_filename_extension, key_source::{ crypto_parameters_keep_fd, format_key_source, get_encryption_key_password, KEYFD_SCHEMA, KEYFILE_SCHEMA, @@ -33,9 +33,9 @@ use pbs_client::tools::{ }; use pbs_client::{BackupReader, BackupRepository, RemoteChunkReader}; use pbs_datastore::catalog::{ArchiveEntry, CatalogReader, DirEntryAttribute}; -use pbs_datastore::dynamic_index::{BufferedDynamicReader, LocalDynamicReadAt}; +use pbs_datastore::dynamic_index::BufferedDynamicReader; use pbs_datastore::index::IndexFile; -use pbs_datastore::{BackupManifest, CATALOG_NAME}; +use pbs_datastore::CATALOG_NAME; use pbs_key_config::decrypt_key; use pbs_tools::crypt_config::CryptConfig; @@ -353,31 +353,6 @@ 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: { -- 2.39.2 _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel