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 B42181FF187 for ; Mon, 25 Aug 2025 12:33:58 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 20FE6F8A2; Mon, 25 Aug 2025 12:34:03 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Mon, 25 Aug 2025 12:32:49 +0200 Message-ID: <20250825103249.443771-7-c.ebner@proxmox.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250825103249.443771-1-c.ebner@proxmox.com> References: <20250825103249.443771-1-c.ebner@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1756117977146 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.044 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 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