From: "Fabian Grünbichler" <f.gruenbichler@proxmox.com>
To: Proxmox Backup Server development discussion
<pbs-devel@lists.proxmox.com>
Subject: Re: [pbs-devel] [PATCH proxmox-backup 05/12] backup/datastore: prevent protected snapshots to be removed
Date: Thu, 16 Sep 2021 12:04:27 +0200 [thread overview]
Message-ID: <1631785829.yhqn3y6em3.astroid@nora.none> (raw)
In-Reply-To: <<20210906105755.2651203-6-d.csapak@proxmox.com>
On September 6, 2021 12:57 pm, Dominik Csapak wrote:
> by throwing an error for remove_backup_dir, and skipping for
> remove_backup_group
>
> Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
> ---
> src/backup/datastore.rs | 37 +++++++++++++++++++++++++------------
> 1 file changed, 25 insertions(+), 12 deletions(-)
>
> diff --git a/src/backup/datastore.rs b/src/backup/datastore.rs
> index 7986c328..03f0a744 100644
> --- a/src/backup/datastore.rs
> +++ b/src/backup/datastore.rs
> @@ -270,8 +270,9 @@ impl DataStore {
> full_path
> }
>
> - /// Remove a complete backup group including all snapshots
> - pub fn remove_backup_group(&self, backup_group: &BackupGroup) -> Result<(), Error> {
> + /// Remove a complete backup group including all snapshots, returns true
> + /// if all snapshots were removed, and false if some were protected
> + pub fn remove_backup_group(&self, backup_group: &BackupGroup) -> Result<bool, Error> {
>
> let full_path = self.group_path(backup_group);
>
> @@ -279,22 +280,30 @@ impl DataStore {
>
> log::info!("removing backup group {:?}", full_path);
>
> + let mut removed_all = true;
> +
> // remove all individual backup dirs first to ensure nothing is using them
> for snap in backup_group.list_backups(&self.base_path())? {
could also first iterate and check for protected status, and skip
removal of any snapshot entirely if we find a protected snapshot?
it would still require the re-check in case the protection status
changed in the meantime, since that is not guarded by any lock atm, and
even if it were, it would be a snapshot level lock, and we can't hold
all of those for the whole group here ;)
alternatively (since the remove group call bails anyway if a protected
snapshot was skipped), we could bail directly here when encountering the
first protected snapshot to simplify matters a bit?
> + if snap.backup_dir.is_protected(self.base_path()) {
> + removed_all = false;
> + continue;
> + }
> self.remove_backup_dir(&snap.backup_dir, false)?;
> }
>
> - // no snapshots left, we can now safely remove the empty folder
> - std::fs::remove_dir_all(&full_path)
> - .map_err(|err| {
> - format_err!(
> - "removing backup group directory {:?} failed - {}",
> - full_path,
> - err,
> - )
> - })?;
> + if removed_all {
> + // no snapshots left, we can now safely remove the empty folder
> + std::fs::remove_dir_all(&full_path)
> + .map_err(|err| {
> + format_err!(
> + "removing backup group directory {:?} failed - {}",
> + full_path,
> + err,
> + )
> + })?;
> + }
>
> - Ok(())
> + Ok(removed_all)
> }
>
> /// Remove a backup directory including all content
> @@ -308,6 +317,10 @@ impl DataStore {
> _manifest_guard = self.lock_manifest(backup_dir)?;
> }
>
> + if backup_dir.is_protected(self.base_path()) {
> + bail!("cannot remove protected snapshot");
> + }
> +
> log::info!("removing backup snapshot {:?}", full_path);
> std::fs::remove_dir_all(&full_path)
> .map_err(|err| {
> --
> 2.30.2
>
>
>
> _______________________________________________
> pbs-devel mailing list
> pbs-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
>
>
>
next prev parent reply other threads:[~2021-09-16 10:04 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-06 10:57 [pbs-devel] [PATCH proxmox-backup 00/12] add 'protected' setting for snapshots Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 01/12] pbs-datastore: add protection info to BackupInfo Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 02/12] pbs-datastore: skip protected backups in pruning Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 03/12] add protected info of snapshots to api and task logs Dominik Csapak
[not found] ` <<20210906105755.2651203-4-d.csapak@proxmox.com>
2021-09-16 10:04 ` Fabian Grünbichler
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 04/12] tests/prune: add tests for protecteded backups Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 05/12] backup/datastore: prevent protected snapshots to be removed Dominik Csapak
[not found] ` <<20210906105755.2651203-6-d.csapak@proxmox.com>
2021-09-16 10:04 ` Fabian Grünbichler [this message]
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 06/12] pull_store/group: dont try remove locally protected snapshots Dominik Csapak
2021-09-16 10:08 ` Fabian Grünbichler
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 07/12] api2: datastore/delete_group: throw error for partially removed group Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 08/12] api2/admin/datastore: add get/set_protection Dominik Csapak
2021-09-10 12:43 ` Fabian Ebner
2021-09-13 8:34 ` Dominik Csapak
2021-09-16 10:16 ` Fabian Ebner
2021-09-17 12:02 ` Fabian Ebner
[not found] ` <<<20210906105755.2651203-9-d.csapak@proxmox.com>
2021-09-16 10:04 ` Fabian Grünbichler
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 09/12] proxmox-backup-client: add 'protected update command' Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 10/12] ui: PruneInputPanel: add keepReason 'protected' for protected backups Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 11/12] ui: add protected icon to snapshots Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 12/12] fix #3602: ui: datastore/Content: add action to set protection status Dominik Csapak
[not found] ` <<20210906105755.2651203-1-d.csapak@proxmox.com>
2021-09-16 10:08 ` [pbs-devel] [PATCH proxmox-backup 00/12] add 'protected' setting for snapshots Fabian Grünbichler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1631785829.yhqn3y6em3.astroid@nora.none \
--to=f.gruenbichler@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.