From: Dietmar Maurer <dietmar@proxmox.com>
To: Proxmox Backup Server development discussion
<pbs-devel@lists.proxmox.com>,
Dominik Csapak <d.csapak@proxmox.com>
Subject: [pbs-devel] applied: [PATCH proxmox-backup 1/2] api2/tape/restore: restore_chunk_archive: only ignore tape related errors
Date: Wed, 14 Apr 2021 10:42:17 +0200 (CEST) [thread overview]
Message-ID: <567501781.2857.1618389737844@webmail.proxmox.com> (raw)
I don't think this fixes any bugs, but the code is cleaner and more obvious, so
I applied it anyways...
> On 04/13/2021 12:58 PM Dominik Csapak <d.csapak@proxmox.com> wrote:
>
>
> when we get an error from the tape, we possibly want to ignore it,
> i.e. when the file was incomplete, but we still want to error
> out if the error came from e.g, the datastore, so we have to move
> the error checking code to the 'next_chunk' call
>
> Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
> ---
> src/api2/tape/restore.rs | 77 ++++++++++++++++++++--------------------
> 1 file changed, 38 insertions(+), 39 deletions(-)
>
> diff --git a/src/api2/tape/restore.rs b/src/api2/tape/restore.rs
> index afce3449..9f79f06f 100644
> --- a/src/api2/tape/restore.rs
> +++ b/src/api2/tape/restore.rs
> @@ -597,54 +597,53 @@ fn restore_chunk_archive<'a>(
>
> let mut decoder = ChunkArchiveDecoder::new(reader);
>
> - let result: Result<_, Error> = proxmox::try_block!({
> - while let Some((digest, blob)) = decoder.next_chunk()? {
> -
> - worker.check_abort()?;
> -
> - if let Some(datastore) = datastore {
> - let chunk_exists = datastore.cond_touch_chunk(&digest, false)?;
> - if !chunk_exists {
> - blob.verify_crc()?;
> + loop {
> + let (digest, blob) = match decoder.next_chunk() {
> + Ok(Some((digest, blob))) => (digest, blob),
> + Ok(None) => break,
> + Err(err) => {
> + let reader = decoder.reader();
> +
> + // check if this stream is marked incomplete
> + if let Ok(true) = reader.is_incomplete() {
> + return Ok(Some(chunks));
> + }
>
> - if blob.crypt_mode()? == CryptMode::None {
> - blob.decode(None, Some(&digest))?; // verify digest
> - }
> - if verbose {
> - task_log!(worker, "Insert chunk: {}", proxmox::tools::digest_to_hex(&digest));
> - }
> - datastore.insert_chunk(&blob, &digest)?;
> - } else if verbose {
> - task_log!(worker, "Found existing chunk: {}", proxmox::tools::digest_to_hex(&digest));
> + // check if this is an aborted stream without end marker
> + if let Ok(false) = reader.has_end_marker() {
> + worker.log("missing stream end marker".to_string());
> + return Ok(None);
> }
> - } else if verbose {
> - task_log!(worker, "Found chunk: {}", proxmox::tools::digest_to_hex(&digest));
> +
> + // else the archive is corrupt
> + return Err(err);
> }
> - chunks.push(digest);
> - }
> - Ok(())
> - });
> + };
>
> - match result {
> - Ok(()) => Ok(Some(chunks)),
> - Err(err) => {
> - let reader = decoder.reader();
> + worker.check_abort()?;
>
> - // check if this stream is marked incomplete
> - if let Ok(true) = reader.is_incomplete() {
> - return Ok(Some(chunks));
> - }
> + if let Some(datastore) = datastore {
> + let chunk_exists = datastore.cond_touch_chunk(&digest, false)?;
> + if !chunk_exists {
> + blob.verify_crc()?;
>
> - // check if this is an aborted stream without end marker
> - if let Ok(false) = reader.has_end_marker() {
> - worker.log("missing stream end marker".to_string());
> - return Ok(None);
> + if blob.crypt_mode()? == CryptMode::None {
> + blob.decode(None, Some(&digest))?; // verify digest
> + }
> + if verbose {
> + task_log!(worker, "Insert chunk: {}", proxmox::tools::digest_to_hex(&digest));
> + }
> + datastore.insert_chunk(&blob, &digest)?;
> + } else if verbose {
> + task_log!(worker, "Found existing chunk: {}", proxmox::tools::digest_to_hex(&digest));
> }
> -
> - // else the archive is corrupt
> - Err(err)
> + } else if verbose {
> + task_log!(worker, "Found chunk: {}", proxmox::tools::digest_to_hex(&digest));
> }
> + chunks.push(digest);
> }
> +
> + Ok(Some(chunks))
> }
>
> fn restore_snapshot_archive<'a>(
> --
> 2.20.1
>
>
>
> _______________________________________________
> pbs-devel mailing list
> pbs-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
reply other threads:[~2021-04-14 8:42 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=567501781.2857.1618389737844@webmail.proxmox.com \
--to=dietmar@proxmox.com \
--cc=d.csapak@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.