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 DEA871FF17A for ; Tue, 11 Nov 2025 15:29:44 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 7E244DD48; Tue, 11 Nov 2025 15:30:23 +0100 (CET) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Tue, 11 Nov 2025 15:29:52 +0100 Message-ID: <20251111143002.759901-10-c.ebner@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251111143002.759901-1-c.ebner@proxmox.com> References: <20251111143002.759901-1-c.ebner@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1762871393083 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.048 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 v5 09/19] chunk store: make chunk removal a helper method of the chunk store 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" Better encapsulate functionality which touches the chunk store, to assure a common interface is used. The local datastore LRU cache will call this during garbage collection to clean up chunk marker files for chunks which have been removed from the S3 object store backend. This is in preparation for fixing a deadlock, no functional changes intended. Signed-off-by: Christian Ebner --- pbs-datastore/src/chunk_store.rs | 9 +++++++++ pbs-datastore/src/local_datastore_lru_cache.rs | 3 +-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/pbs-datastore/src/chunk_store.rs b/pbs-datastore/src/chunk_store.rs index 7099b6614..a7ae4fca5 100644 --- a/pbs-datastore/src/chunk_store.rs +++ b/pbs-datastore/src/chunk_store.rs @@ -702,6 +702,15 @@ impl ChunkStore { Ok(()) } + /// Removes a chunk marker file from the `LocalDatastoreLruCache`s chunk store. + /// + /// Callers must hold the per-chunk file lock in order to avoid races with renaming of corrupt + /// chunks by verifications and chunk inserts by backups. + pub(crate) fn remove_chunk(&self, digest: &[u8; 32]) -> Result<(), Error> { + let (chunk_path, _digest_str) = self.chunk_path(digest); + std::fs::remove_file(chunk_path).map_err(Error::from) + } + pub fn relative_path(&self, path: &Path) -> PathBuf { // unwrap: only `None` in unit tests assert!(self.locker.is_some()); diff --git a/pbs-datastore/src/local_datastore_lru_cache.rs b/pbs-datastore/src/local_datastore_lru_cache.rs index fe3b51a55..7b9d8caae 100644 --- a/pbs-datastore/src/local_datastore_lru_cache.rs +++ b/pbs-datastore/src/local_datastore_lru_cache.rs @@ -52,8 +52,7 @@ impl LocalDatastoreLruCache { /// Fails if the chunk cannot be deleted successfully. pub(crate) unsafe fn remove(&self, digest: &[u8; 32]) -> Result<(), Error> { self.cache.remove(*digest); - let (path, _digest_str) = self.store.chunk_path(digest); - std::fs::remove_file(path).map_err(Error::from) + self.store.remove_chunk(digest) } /// Access the locally cached chunk or fetch it from the S3 object store via the provided -- 2.47.3 _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel