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 3195E1FF16F for <inbox@lore.proxmox.com>; Tue, 13 May 2025 15:52:48 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 534B132F32; Tue, 13 May 2025 15:53:05 +0200 (CEST) From: Christian Ebner <c.ebner@proxmox.com> To: pbs-devel@lists.proxmox.com Date: Tue, 13 May 2025 15:52:27 +0200 Message-Id: <20250513135247.644260-1-c.ebner@proxmox.com> X-Mailer: git-send-email 2.39.5 MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.030 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 URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [prune.rs, datastore.rs, pull.rs, environment.rs, group.rs, snapshot.rs, proxmox.com, sync.rs, verify.rs, backup.rs] Subject: [pbs-devel] [PATCH v3 proxmox proxmox-backup 00/20] implement trash bin functionality 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> This patch series implements a trash bin functionality, marking backup snapshots and groups as trashed on prune and forget instead of deleting them immediately. Cleanup is deferred to the garbage collection job, allowing to recover the trashed items if removed by accident. Items are marked as trash by creating a `.trashed` marker file within the respective snapshot or group directory. If group directories contain the marker file, the whole group is considered trash. New backups to a trashed group will remove the group trash marker file, but only if the group is owned by the user creating the backup. Backup creation will fail otherwise, in order to guarantee ownership. If an backup is created to a pre-existing but trashed backup directory, the backup directories contents are cleared and the backup can proceed as if no such snapshot existed. Most notably changes since the previous RFC version [0] (thanks Fabian for feedback and discussion): - Do not allow to mark namespaces as trash. Instead, in order to remove a namespace all contents (including trashed items) must be deleted. Drop all related patches as there is no longer the need to operate and filter on namespaces directly. - Use exclusive snapshot/group locks in order to guarantee consistency during concurrent operations. - Only clear backup snapshot directories in case of a new backup to the same backup directory. For groups, only allow to create a new backup to a trashed group if the ownership matches, but do not clear pre-existing trashed contents. - Use pre-existing helpers for snapshot/group cleanup during garbage collection. - Allow to clear only the trashed contents for a namespace or group via the API/WebUI, not removing all contents. - Allow to filter for all trash states while listing snapshots, introducing a dedicated api type for this. - Fix several smaller UI issues As most of the patches changed significantly and many got dropped while new ones added, no per-patch changes are noted. Note: Patches 5 and onwards require patches 1 and 2 to the PBS api types for compilation. [0] https://lore.proxmox.com/pbs-devel/20250508130555.494782-1-c.ebner@proxmox.com/T/ proxmox: Christian Ebner (2): pbs api types: add type for snapshot list filtering based on trash state pbs api types: datastore: add trash marker to snapshot list item pbs-api-types/src/datastore.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) proxmox-backup: Christian Ebner (18): datastore/api: mark snapshots as trash on destroy datastore: mark groups as trash on destroy datastore: add helpers to check if snapshot/group is trash datastore: allow filtering of backups by their trash state api: datastore: add trash state filtering for snapshot listing datastore: ignore trashed snapshots for last successful backup sync: ignore trashed snapshots/groups when reading from local source api: tape: check trash marker when trying to write snapshot datastore: clear trashed snapshot dir if re-creation requested datastore: recover backup group from trash for new backups datastore: garbage collection: clean-up trashed snapshots and groups client: expose skip trash flags for cli commands api: admin: implement endpoints to recover trashed contents api: admin: move backup group list generation into helper api: admin: add endpoint to clear trashed items from group ui: add recover for trashed items tab to datastore panel ui: drop 'permanent' in group/snapshot forget, default is to trash ui: mention trash items will be cleared on namespace deletion pbs-datastore/src/backup_info.rs | 152 +++-- pbs-datastore/src/datastore.rs | 90 ++- proxmox-backup-client/src/group.rs | 14 +- proxmox-backup-client/src/snapshot.rs | 16 +- src/api2/admin/datastore.rs | 319 ++++++++-- src/api2/backup/environment.rs | 1 + src/api2/tape/backup.rs | 12 +- src/backup/verify.rs | 6 +- src/server/prune_job.rs | 10 +- src/server/pull.rs | 20 +- src/server/sync.rs | 2 + tests/prune.rs | 1 + www/Makefile | 1 + www/Utils.js | 1 + www/datastore/Content.js | 4 +- www/datastore/Panel.js | 8 + www/datastore/RecoverTrashed.js | 805 ++++++++++++++++++++++++++ www/window/NamespaceEdit.js | 2 +- 18 files changed, 1359 insertions(+), 105 deletions(-) create mode 100644 www/datastore/RecoverTrashed.js -- 2.39.5 _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel