From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pbs-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id DC6C21FF16F for <inbox@lore.proxmox.com>; Tue, 13 May 2025 15:53:17 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 3929F33366; Tue, 13 May 2025 15:53:40 +0200 (CEST) From: Christian Ebner <c.ebner@proxmox.com> To: pbs-devel@lists.proxmox.com Date: Tue, 13 May 2025 15:52:38 +0200 Message-Id: <20250513135247.644260-12-c.ebner@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250513135247.644260-1-c.ebner@proxmox.com> References: <20250513135247.644260-1-c.ebner@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.029 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 v3 proxmox-backup 11/20] datastore: clear trashed snapshot dir if re-creation requested X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion <pbs-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pbs-devel/> List-Post: <mailto:pbs-devel@lists.proxmox.com> List-Help: <mailto:pbs-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox Backup Server development discussion <pbs-devel@lists.proxmox.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" <pbs-devel-bounces@lists.proxmox.com> If a previously trashed snapshot has been requested for re-creation (e.g. by a sync job in push direction), drop the contents of the currently trashed snapshot. The snapshot directory itself is already locked at that point, either by the old locking mechanism acting on the directory itself or by the new locking mechanism. Therefore, concurrent operations can be excluded. For the call site this acts as if the snapshot directory has been newly created. Signed-off-by: Christian Ebner <c.ebner@proxmox.com> --- pbs-datastore/src/datastore.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/pbs-datastore/src/datastore.rs b/pbs-datastore/src/datastore.rs index dc4059789..6f99ff572 100644 --- a/pbs-datastore/src/datastore.rs +++ b/pbs-datastore/src/datastore.rs @@ -826,8 +826,9 @@ impl DataStore { ) -> Result<(PathBuf, bool, BackupLockGuard), Error> { let backup_dir = self.backup_dir(ns.clone(), backup_dir.clone())?; let relative_path = backup_dir.relative_path(); + let full_path = backup_dir.full_path(); - match std::fs::create_dir(backup_dir.full_path()) { + match std::fs::create_dir(&full_path) { Ok(_) => { let guard = backup_dir.lock().with_context(|| { format!("while creating new locked snapshot '{backup_dir:?}'") @@ -838,6 +839,28 @@ impl DataStore { let guard = backup_dir .lock() .with_context(|| format!("while creating locked snapshot '{backup_dir:?}'"))?; + + if backup_dir.is_trash() { + info!("clear trashed backup snapshot {full_path:?}"); + let dir_entries = std::fs::read_dir(&full_path).context( + "failed to read directory contents during cleanup of trashed snapshot", + )?; + for entry in dir_entries { + let entry = entry.context( + "failed to read directory entry during clenup of trashed snapshot", + )?; + // Only expect regular file entries + std::fs::remove_file(entry.path()).context( + "failed to remove directory entry during clenup of trashed snapshot", + )?; + } + + // Group already untrashed by `create_locked_backup_group`, no further action + // required. + + return Ok((relative_path, true, guard)); + } + Ok((relative_path, false, guard)) } Err(e) => Err(e.into()), -- 2.39.5 _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel