From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 5E7D7BC21D for ; Thu, 28 Mar 2024 13:38:19 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D44BA9F1E for ; Thu, 28 Mar 2024 13:37:44 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Thu, 28 Mar 2024 13:37:41 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id E51BF429FC for ; Thu, 28 Mar 2024 13:37:40 +0100 (CET) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Thu, 28 Mar 2024 13:36:28 +0100 Message-Id: <20240328123707.336951-20-c.ebner@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240328123707.336951-1-c.ebner@proxmox.com> References: <20240328123707.336951-1-c.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.030 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 v3 proxmox-backup 19/58] client: pxar: combine writer params into struct 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: , X-List-Received-Date: Thu, 28 Mar 2024 12:38:19 -0000 Combine all writer related parameters to the pxar archive creation into a dedicated struct to limit the number of parameters. In preparation for adding also the payload writer as further optional member of the stuct, reducing the methods call parameter. Signed-off-by: Christian Ebner --- changes since version 2: - not present in previous version pbs-client/src/pxar/create.rs | 18 ++++++++++++++---- pbs-client/src/pxar/mod.rs | 2 +- pbs-client/src/pxar_backup_stream.rs | 5 +++-- .../src/proxmox_restore_daemon/api.rs | 14 +++++++++++--- pxar-bin/src/main.rs | 6 +++--- tests/catar.rs | 3 +-- 6 files changed, 33 insertions(+), 15 deletions(-) diff --git a/pbs-client/src/pxar/create.rs b/pbs-client/src/pxar/create.rs index c9bf6df85..82f05889b 100644 --- a/pbs-client/src/pxar/create.rs +++ b/pbs-client/src/pxar/create.rs @@ -135,12 +135,22 @@ struct Archiver { type Encoder<'a, T> = pxar::encoder::aio::Encoder<'a, T>; +pub struct PxarWriters { + writer: T, + catalog: Option>>, +} + +impl PxarWriters { + pub fn new(writer: T, catalog: Option>>) -> Self { + Self { writer, catalog } + } +} + pub async fn create_archive( source_dir: Dir, - mut writer: T, + mut writers: PxarWriters, feature_flags: Flags, callback: F, - catalog: Option>>, options: PxarCreateOptions, ) -> Result<(), Error> where @@ -170,7 +180,7 @@ where set.insert(stat.st_dev); } - let mut encoder = Encoder::new(&mut writer, &metadata, None).await?; + let mut encoder = Encoder::new(&mut writers.writer, &metadata, None).await?; let mut patterns = options.patterns; @@ -188,7 +198,7 @@ where fs_magic, callback: Box::new(callback), patterns, - catalog, + catalog: writers.catalog, path: PathBuf::new(), entry_counter: 0, entry_limit: options.entries_max, diff --git a/pbs-client/src/pxar/mod.rs b/pbs-client/src/pxar/mod.rs index 14674b9b9..b7dcf8362 100644 --- a/pbs-client/src/pxar/mod.rs +++ b/pbs-client/src/pxar/mod.rs @@ -56,7 +56,7 @@ pub(crate) mod tools; mod flags; pub use flags::Flags; -pub use create::{create_archive, PxarCreateOptions}; +pub use create::{create_archive, PxarCreateOptions, PxarWriters}; pub use extract::{ create_tar, create_zip, extract_archive, extract_sub_dir, extract_sub_dir_seq, ErrorHandler, OverwriteFlags, PxarExtractContext, PxarExtractOptions, diff --git a/pbs-client/src/pxar_backup_stream.rs b/pbs-client/src/pxar_backup_stream.rs index 22a6ffdc2..bfa108a8b 100644 --- a/pbs-client/src/pxar_backup_stream.rs +++ b/pbs-client/src/pxar_backup_stream.rs @@ -17,6 +17,8 @@ use proxmox_io::StdChannelWriter; use pbs_datastore::catalog::CatalogWriter; +use crate::pxar::create::PxarWriters; + /// Stream implementation to encode and upload .pxar archives. /// /// The hyper client needs an async Stream for file upload, so we @@ -56,13 +58,12 @@ impl PxarBackupStream { let writer = pxar::encoder::sync::StandardWriter::new(writer); if let Err(err) = crate::pxar::create_archive( dir, - writer, + PxarWriters::new(writer, Some(catalog)), crate::pxar::Flags::DEFAULT, move |path| { log::debug!("{:?}", path); Ok(()) }, - Some(catalog), options, ) .await diff --git a/proxmox-restore-daemon/src/proxmox_restore_daemon/api.rs b/proxmox-restore-daemon/src/proxmox_restore_daemon/api.rs index c20552225..4e63978b7 100644 --- a/proxmox-restore-daemon/src/proxmox_restore_daemon/api.rs +++ b/proxmox-restore-daemon/src/proxmox_restore_daemon/api.rs @@ -23,7 +23,9 @@ use proxmox_sortable_macro::sortable; use proxmox_sys::fs::read_subdir; use pbs_api_types::file_restore::{FileRestoreFormat, RestoreDaemonStatus}; -use pbs_client::pxar::{create_archive, Flags, PxarCreateOptions, ENCODER_MAX_ENTRIES}; +use pbs_client::pxar::{ + create_archive, Flags, PxarCreateOptions, PxarWriters, ENCODER_MAX_ENTRIES, +}; use pbs_datastore::catalog::{ArchiveEntry, DirEntryAttribute}; use pbs_tools::json::required_string_param; @@ -356,8 +358,14 @@ fn extract( }; let pxar_writer = TokioWriter::new(writer); - create_archive(dir, pxar_writer, Flags::DEFAULT, |_| Ok(()), None, options) - .await + create_archive( + dir, + PxarWriters::new(pxar_writer, None), + Flags::DEFAULT, + |_| Ok(()), + options, + ) + .await } .await; if let Err(err) = result { diff --git a/pxar-bin/src/main.rs b/pxar-bin/src/main.rs index 2bbe90e34..7083a4b82 100644 --- a/pxar-bin/src/main.rs +++ b/pxar-bin/src/main.rs @@ -13,7 +13,8 @@ use tokio::signal::unix::{signal, SignalKind}; use pathpatterns::{MatchEntry, MatchType, PatternFlag}; use pbs_client::pxar::{ - format_single_line_entry, Flags, OverwriteFlags, PxarExtractOptions, ENCODER_MAX_ENTRIES, + format_single_line_entry, Flags, OverwriteFlags, PxarExtractOptions, PxarWriters, + ENCODER_MAX_ENTRIES, }; use proxmox_router::cli::*; @@ -376,13 +377,12 @@ async fn create_archive( let writer = pxar::encoder::sync::StandardWriter::new(writer); pbs_client::pxar::create_archive( dir, - writer, + PxarWriters::new(writer, None), feature_flags, move |path| { log::debug!("{:?}", path); Ok(()) }, - None, options, ) .await?; diff --git a/tests/catar.rs b/tests/catar.rs index 36bb4f3bc..f414da8c9 100644 --- a/tests/catar.rs +++ b/tests/catar.rs @@ -35,10 +35,9 @@ fn run_test(dir_name: &str) -> Result<(), Error> { let rt = tokio::runtime::Runtime::new().unwrap(); rt.block_on(create_archive( dir, - writer, + PxarWriters::new(writer, None), Flags::DEFAULT, |_| Ok(()), - None, options, ))?; -- 2.39.2