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 7203D1FF38E for ; Tue, 11 Jun 2024 10:29:24 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 9731432C66; Tue, 11 Jun 2024 10:29:59 +0200 (CEST) Date: Tue, 11 Jun 2024 10:29:21 +0200 From: Fabian =?iso-8859-1?q?Gr=FCnbichler?= To: Proxmox Backup Server development discussion References: <20240610151157.529760-1-c.ebner@proxmox.com> <20240610151157.529760-3-c.ebner@proxmox.com> In-Reply-To: <20240610151157.529760-3-c.ebner@proxmox.com> MIME-Version: 1.0 User-Agent: astroid/0.16.0 (https://github.com/astroidmail/astroid) Message-Id: <1718092294.tmjatog7d5.astroid@yuna.none> X-SPAM-LEVEL: Spam detection results: 0 AWL 0.057 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: Re: [pbs-devel] [PATCH proxmox-backup 2/2] client: pxar: fix fuse mount performance for split archives 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" On June 10, 2024 5:11 pm, Christian Ebner wrote: > Adapt to the decoder method changes introduced in the pxar library, > which were introduced in order to move the consistency check for > metadata and payload data archives. > > The new location of the check allows to access the pxar archive via > a `Split` variant reader instance, without penalization when just > accessing the metadata, not reading any payload data. > > This greatly improves performance when accessing fuse mounted > archives. > > Signed-off-by: Christian Ebner > --- > pbs-client/src/pxar/extract.rs | 33 ++++++++++++++++++--------------- > src/api2/tape/restore.rs | 2 +- > 2 files changed, 19 insertions(+), 16 deletions(-) > > diff --git a/pbs-client/src/pxar/extract.rs b/pbs-client/src/pxar/extract.rs > index 38d4ca89a..b3545650e 100644 > --- a/pbs-client/src/pxar/extract.rs > +++ b/pbs-client/src/pxar/extract.rs > @@ -374,7 +374,10 @@ where > } > } > (true, EntryKind::File { size, .. }) => { > - let contents = self.decoder.contents(); > + let contents = match self.decoder.contents() { > + Ok(contents) => contents, > + Err(err) => return Some(Err(err.into())), > + }; the error handling below adds context which this part here is lacking. I think the whole match arm would be easier to understand, while preserving the context, if written as: (true, EntryKind::File { size, .. }) => match self.decoder.contents() { Ok(Some(mut contents)) => self.extractor.extract_file( &file_name, metadata, *size, &mut contents, self.extractor .overwrite_flags .contains(OverwriteFlags::FILE), ), Ok(None) => Err(format_err!( "found regular file entry without contents in archive" )), Err(err) => Err(err.into()), } .context(PxarExtractContext::ExtractFile), > > if let Some(mut contents) = contents { > self.extractor.extract_file( > @@ -872,7 +875,8 @@ where > match entry.kind() { > EntryKind::File { .. } => { > let size = decoder.content_size().unwrap_or(0); > - tar_add_file(&mut tarencoder, decoder.contents(), size, metadata, path).await? > + let contents = decoder.contents().await?; > + tar_add_file(&mut tarencoder, contents, size, metadata, path).await? > } > EntryKind::Hardlink(link) => { > if !link.data.is_empty() { > @@ -894,14 +898,9 @@ where > path > } else { > let size = decoder.content_size().unwrap_or(0); > - tar_add_file( > - &mut tarencoder, > - decoder.contents(), > - size, > - metadata, > - path, > - ) > - .await?; > + let contents = decoder.contents().await?; > + tar_add_file(&mut tarencoder, contents, size, metadata, path) > + .await?; > hardlinks.insert(realpath.to_owned(), path.to_owned()); > continue; > } > @@ -1038,7 +1037,8 @@ where > metadata.stat.mode as u16, > true, > ); > - zip.add_entry(entry, decoder.contents()) > + let contents = decoder.contents().await?; > + zip.add_entry(entry, contents) > .await > .context("could not send file entry")?; > } > @@ -1056,7 +1056,8 @@ where > metadata.stat.mode as u16, > true, > ); > - zip.add_entry(entry, decoder.contents()) > + let contents = decoder.contents().await?; > + zip.add_entry(entry, contents) > .await > .context("could not send file entry")?; > } > @@ -1279,14 +1280,16 @@ where > .with_context(|| format!("error at entry {file_name_os:?}"))?; > } > EntryKind::File { size, .. } => { > + let mut contents = decoder > + .contents() > + .await? > + .context("found regular file entry without contents in archive")?; > extractor > .async_extract_file( > &file_name, > metadata, > *size, > - &mut decoder > - .contents() > - .context("found regular file entry without contents in archive")?, > + &mut contents, > extractor.overwrite_flags.contains(OverwriteFlags::FILE), > ) > .await? > diff --git a/src/api2/tape/restore.rs b/src/api2/tape/restore.rs > index 382909647..2b2025f6d 100644 > --- a/src/api2/tape/restore.rs > +++ b/src/api2/tape/restore.rs > @@ -1748,7 +1748,7 @@ fn try_restore_snapshot_archive( > } > > let filename = entry.file_name(); > - let mut contents = match decoder.contents() { > + let mut contents = match decoder.contents()? { > None => bail!("missing file content"), > Some(contents) => contents, > }; > -- > 2.39.2 > > > > _______________________________________________ > pbs-devel mailing list > pbs-devel@lists.proxmox.com > https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel > > > _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel