From: Christian Ebner <c.ebner@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH proxmox-backup v2 1/1] fix #6665: never rename chunks on s3 client fetch errors
Date: Mon, 25 Aug 2025 15:10:07 +0200 [thread overview]
Message-ID: <20250825131007.626777-8-c.ebner@proxmox.com> (raw)
In-Reply-To: <20250825131007.626777-1-c.ebner@proxmox.com>
The chunk verification for the s3 backend always fetches the chunk
directly from the backend and verifies it based on the received
response.
Currently, when fetching the chunk contents failed in case of an
unrelated s3 client error, e.g. due to transient networking issues,
both the locally cached and the chunk in the object store, were
incorrectly marked as bad and renamed.
Instead, treat chunk fetching issues as error but do not treat the
chunk itself as bad.
Fixes: https://bugzilla.proxmox.com/show_bug.cgi?id=6665
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
---
src/backup/verify.rs | 35 +++++++++++++++++++++++------------
1 file changed, 23 insertions(+), 12 deletions(-)
diff --git a/src/backup/verify.rs b/src/backup/verify.rs
index b1452f267..069c3bdf9 100644
--- a/src/backup/verify.rs
+++ b/src/backup/verify.rs
@@ -284,13 +284,25 @@ impl VerifyWorker {
let object_key = pbs_datastore::s3::object_key_from_digest(&info.digest)?;
match proxmox_async::runtime::block_on(s3_client.get_object(object_key)) {
Ok(Some(response)) => {
- let bytes = proxmox_async::runtime::block_on(response.content.collect())?
- .to_bytes();
- let chunk = DataBlob::from_raw(bytes.to_vec())?;
- let size = info.size();
- *read_bytes += chunk.raw_size();
- decoder_pool.send((chunk, info.digest, size))?;
- *decoded_bytes += size;
+ let chunk_result = proxmox_lang::try_block!({
+ let bytes =
+ proxmox_async::runtime::block_on(response.content.collect())?
+ .to_bytes();
+ DataBlob::from_raw(bytes.to_vec())
+ });
+
+ match chunk_result {
+ Ok(chunk) => {
+ let size = info.size();
+ *read_bytes += chunk.raw_size();
+ decoder_pool.send((chunk, info.digest, size))?;
+ *decoded_bytes += size;
+ }
+ Err(err) => {
+ errors.fetch_add(1, Ordering::SeqCst);
+ error!("can't verify chunk, load failed - {err}");
+ }
+ }
}
Ok(None) => self.add_corrupt_chunk(
info.digest,
@@ -300,11 +312,10 @@ impl VerifyWorker {
hex::encode(info.digest)
),
),
- Err(err) => self.add_corrupt_chunk(
- info.digest,
- errors,
- &format!("can't verify chunk, load failed - {err}"),
- ),
+ Err(err) => {
+ errors.fetch_add(1, Ordering::SeqCst);
+ error!("can't verify chunk, load failed - {err}");
+ }
}
}
}
--
2.47.2
_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
prev parent reply other threads:[~2025-08-25 13:10 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-25 13:10 [pbs-devel] [PATCH proxmox{, -backup} v2 0/7] fix #6665: never mark chunks as bad on s3 client fetch error Christian Ebner
2025-08-25 13:10 ` [pbs-devel] [PATCH proxmox v2 1/6] proxmox-http: add method to share full body as contiguous bytes Christian Ebner
2025-08-25 13:10 ` [pbs-devel] [PATCH proxmox v2 2/6] s3-client: drop non-ambiguous mention of chunks in error message Christian Ebner
2025-08-25 13:10 ` [pbs-devel] [PATCH proxmox v2 3/6] s3-client: fix unintended match statement being an expression Christian Ebner
2025-08-25 13:10 ` [pbs-devel] [PATCH proxmox v2 4/6] s3-client: bump s3 request timeout from 1 minute to 30 minutes Christian Ebner
2025-08-25 13:10 ` [pbs-devel] [PATCH proxmox v2 5/6] s3-client: add retry logic for transient client errors Christian Ebner
2025-08-25 13:10 ` [pbs-devel] [PATCH proxmox v2 6/6] s3-client: use better fitting name for TCP idle time Christian Ebner
2025-08-25 13:10 ` Christian Ebner [this message]
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=20250825131007.626777-8-c.ebner@proxmox.com \
--to=c.ebner@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox