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 1676E1FF183 for ; Wed, 5 Nov 2025 13:23:11 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id EC8FD22936; Wed, 5 Nov 2025 13:23:44 +0100 (CET) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Wed, 5 Nov 2025 13:22:31 +0100 Message-ID: <20251105122233.439382-22-c.ebner@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251105122233.439382-1-c.ebner@proxmox.com> References: <20251105122233.439382-1-c.ebner@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1762345369027 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.047 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 v3 21/23] 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 --- changes since version 2: - not present in previous version 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 426e14ef8..305ce2316 100644 --- a/pbs-datastore/src/chunk_store.rs +++ b/pbs-datastore/src/chunk_store.rs @@ -711,6 +711,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