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 0D2861FF187 for ; Mon, 25 Aug 2025 15:10:21 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id EAC0B12C19; Mon, 25 Aug 2025 15:10:22 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Mon, 25 Aug 2025 15:10:07 +0200 Message-ID: <20250825131007.626777-8-c.ebner@proxmox.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250825131007.626777-1-c.ebner@proxmox.com> References: <20250825131007.626777-1-c.ebner@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1756127415578 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.043 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 proxmox-backup v2 1/1] fix #6665: never rename chunks on s3 client fetch errors 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" 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 --- 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