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 4714B1FF398 for ; Mon, 27 May 2024 16:34:24 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 602805B09; Mon, 27 May 2024 16:34:28 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Mon, 27 May 2024 16:32:33 +0200 Message-Id: <20240527143323.456002-20-c.ebner@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240527143323.456002-1-c.ebner@proxmox.com> References: <20240527143323.456002-1-c.ebner@proxmox.com> MIME-Version: 1.0 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 T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pbs-devel] [PATCH v7 proxmox-backup 19/69] client: pxar: combine writers 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: , 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" Introduce a `PxarWriters` struct to bundle all writer instances required for the pxar archive creation into a single object to limit the number of function call parameters. Signed-off-by: Christian Ebner --- changes since version 6: - rename archive writer from `writer` to `archive` - adapt to new PxarVariant pxar interface type pbs-client/src/pxar/create.rs | 23 +++++++++++++++---- pbs-client/src/pxar/mod.rs | 2 +- pbs-client/src/pxar_backup_stream.rs | 8 ++++--- .../src/proxmox_restore_daemon/api.rs | 8 ++++--- pxar-bin/src/main.rs | 8 +++---- tests/catar.rs | 5 ++-- 6 files changed, 35 insertions(+), 19 deletions(-) diff --git a/pbs-client/src/pxar/create.rs b/pbs-client/src/pxar/create.rs index 1b1bac2d4..cc75f0262 100644 --- a/pbs-client/src/pxar/create.rs +++ b/pbs-client/src/pxar/create.rs @@ -18,7 +18,7 @@ use nix::sys::stat::{FileStat, Mode}; use pathpatterns::{MatchEntry, MatchFlag, MatchList, MatchType, PatternFlag}; use proxmox_sys::error::SysError; use pxar::encoder::{LinkOffset, SeqWrite}; -use pxar::Metadata; +use pxar::{Metadata, PxarVariant}; use proxmox_io::vec; use proxmox_lang::c_str; @@ -135,12 +135,25 @@ struct Archiver { type Encoder<'a, T> = pxar::encoder::aio::Encoder<'a, T>; +pub struct PxarWriters { + archive: PxarVariant, + catalog: Option>>, +} + +impl PxarWriters { + pub fn new( + archive: PxarVariant, + catalog: Option>>, + ) -> Self { + Self { archive, catalog } + } +} + pub async fn create_archive( source_dir: Dir, - mut writer: T, + writers: PxarWriters, feature_flags: Flags, callback: F, - catalog: Option>>, options: PxarCreateOptions, ) -> Result<(), Error> where @@ -170,7 +183,7 @@ where set.insert(stat.st_dev); } - let mut encoder = Encoder::new(pxar::PxarVariant::Unified(&mut writer), &metadata).await?; + let mut encoder = Encoder::new(writers.archive, &metadata).await?; let mut patterns = options.patterns; @@ -188,7 +201,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..8dc3fd088 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 @@ -53,16 +55,16 @@ impl PxarBackupStream { StdChannelWriter::new(tx), )); - let writer = pxar::encoder::sync::StandardWriter::new(writer); + let writer = + pxar::PxarVariant::Unified(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 cb7b53e11..95c9f4619 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; @@ -360,8 +362,8 @@ fn extract( skip_e2big_xattr: false, }; - let pxar_writer = TokioWriter::new(writer); - create_archive(dir, pxar_writer, Flags::DEFAULT, |_| Ok(()), None, options) + let pxar_writer = pxar::PxarVariant::Unified(TokioWriter::new(writer)); + create_archive(dir, PxarWriters::new(pxar_writer, None), Flags::DEFAULT, |_| Ok(()), options) .await } .await; diff --git a/pxar-bin/src/main.rs b/pxar-bin/src/main.rs index 0729db1c9..61756d21c 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::*; @@ -373,16 +374,15 @@ async fn create_archive( feature_flags.remove(Flags::WITH_SOCKETS); } - let writer = pxar::encoder::sync::StandardWriter::new(writer); + let writer = pxar::PxarVariant::Unified(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..932df61a9 100644 --- a/tests/catar.rs +++ b/tests/catar.rs @@ -19,7 +19,7 @@ fn run_test(dir_name: &str) -> Result<(), Error> { .write(true) .truncate(true) .open("test-proxmox.catar")?; - let writer = pxar::encoder::sync::StandardWriter::new(writer); + let writer = pxar::PxarVariant::Unified(pxar::encoder::sync::StandardWriter::new(writer)); let dir = nix::dir::Dir::open( dir_name, @@ -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 _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel