public inbox for pbs-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Wolfgang Bumiller <w.bumiller@proxmox.com>
To: Dominik Csapak <d.csapak@proxmox.com>
Cc: pbs-devel@lists.proxmox.com
Subject: Re: [pbs-devel] [PATCH proxmox-backup v3 08/13] api2/admin/datastore: add get/set_protection
Date: Thu, 28 Oct 2021 11:05:44 +0200	[thread overview]
Message-ID: <20211028090544.hdzw336rqrxb4juc@olga.proxmox.com> (raw)
In-Reply-To: <20211027112238.3758515-9-d.csapak@proxmox.com>

1 error handling issue, and another nit

On Wed, Oct 27, 2021 at 01:22:33PM +0200, Dominik Csapak wrote:
> for gettin/setting the protected flag for snapshots (akin to notes)
> 
> Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
> ---
>  pbs-datastore/src/datastore.rs | 24 +++++++++
>  src/api2/admin/datastore.rs    | 92 ++++++++++++++++++++++++++++++++++
>  2 files changed, 116 insertions(+)
> 
> diff --git a/pbs-datastore/src/datastore.rs b/pbs-datastore/src/datastore.rs
> index e32887de..5049cb3d 100644
> --- a/pbs-datastore/src/datastore.rs
> +++ b/pbs-datastore/src/datastore.rs
> @@ -858,6 +858,30 @@ impl DataStore {
>          Ok(())
>      }
>  
> +    /// Updates the protection status of the specified snapshot.
> +    pub fn update_protection(
> +        &self,
> +        backup_dir: &BackupDir,
> +        protection: bool
> +    ) -> Result<(), Error> {
> +        let full_path = self.snapshot_path(backup_dir);
> +
> +        let _guard = lock_dir_noblock(&full_path, "snapshot", "possibly running or in use")?;
> +
> +        let protected_path = backup_dir.protected_file(self.base_path());
> +        if protection {
> +            std::fs::File::create(protected_path)
> +                .map_err(|err| format_err!("could not create protection file: {}", err))?;

Should we not also ignore `ErrorKind::AlreadyExists` here?
After all, we ignore `NotFound` when removing it.

> +        } else if let Err(err) = std::fs::remove_file(protected_path) {
> +            // ignore error for non-existing file
> +            if err.kind() != std::io::ErrorKind::NotFound {
> +                bail!("could not remove protection file: {}", err);
> +            }
> +        }
> +
> +        Ok(())
> +    }
> +
>      pub fn verify_new(&self) -> bool {
>          self.verify_new
>      }
> diff --git a/src/api2/admin/datastore.rs b/src/api2/admin/datastore.rs
> index fe962e4e..b9bcde12 100644
> --- a/src/api2/admin/datastore.rs
> +++ b/src/api2/admin/datastore.rs
> @@ -1750,6 +1750,92 @@ pub fn set_notes(
>      Ok(())
>  }
>  
> +#[api(
> +    input: {
> +        properties: {
> +            store: {
> +                schema: DATASTORE_SCHEMA,
> +            },
> +            "backup-type": {
> +                schema: BACKUP_TYPE_SCHEMA,
> +            },
> +            "backup-id": {
> +                schema: BACKUP_ID_SCHEMA,
> +            },
> +            "backup-time": {
> +                schema: BACKUP_TIME_SCHEMA,
> +            },
> +        },
> +    },
> +    access: {
> +        permission: &Permission::Privilege(&["datastore", "{store}"], PRIV_DATASTORE_AUDIT | PRIV_DATASTORE_BACKUP, true),
> +    },
> +)]
> +/// Query protection for a specific backup
> +pub fn get_protection(
> +    store: String,
> +    backup_type: String,
> +    backup_id: String,
> +    backup_time: i64,
> +    rpcenv: &mut dyn RpcEnvironment,
> +) -> Result<bool, Error> {
> +    let datastore = DataStore::lookup_datastore(&store)?;
> +
> +    let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
> +    let backup_dir = BackupDir::new(backup_type, backup_id, backup_time)?;
> +
> +    check_priv_or_backup_owner(&datastore, backup_dir.group(), &auth_id, PRIV_DATASTORE_AUDIT)?;
> +
> +    let protected_path = backup_dir.protected_file(datastore.base_path());
> +
> +    Ok(protected_path.exists())

since you don't need the path, use `.is_protected()`

> +}
> +




  reply	other threads:[~2021-10-28  9:05 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-27 11:22 [pbs-devel] [PATCH proxmox-backup v3 00/13] add 'protected' setting for snapshots Dominik Csapak
2021-10-27 11:22 ` [pbs-devel] [PATCH proxmox-backup v3 01/13] pbs-datastore: add protection info to BackupInfo Dominik Csapak
2021-10-28  9:05   ` Wolfgang Bumiller
2021-10-27 11:22 ` [pbs-devel] [PATCH proxmox-backup v3 02/13] pbs-datastore: skip protected backups in pruning Dominik Csapak
2021-10-27 11:22 ` [pbs-devel] [PATCH proxmox-backup v3 03/13] add protected info of snapshots to api and task logs Dominik Csapak
2021-10-28  9:05   ` Wolfgang Bumiller
2021-10-27 11:22 ` [pbs-devel] [PATCH proxmox-backup v3 04/13] tests/prune: add tests for protecteded backups Dominik Csapak
2021-10-27 11:22 ` [pbs-devel] [PATCH proxmox-backup v3 05/13] backup/datastore: prevent protected snapshots to be removed Dominik Csapak
2021-10-27 11:22 ` [pbs-devel] [PATCH proxmox-backup v3 06/13] pull_store/group: dont try remove locally protected snapshots Dominik Csapak
2021-10-27 11:22 ` [pbs-devel] [PATCH proxmox-backup v3 07/13] api2: datastore/delete_group: throw error for partially removed group Dominik Csapak
2021-10-27 11:22 ` [pbs-devel] [PATCH proxmox-backup v3 08/13] api2/admin/datastore: add get/set_protection Dominik Csapak
2021-10-28  9:05   ` Wolfgang Bumiller [this message]
2021-10-27 11:22 ` [pbs-devel] [PATCH proxmox-backup v3 09/13] proxmox-backup-client: add 'protected' commands Dominik Csapak
2021-10-28  9:05   ` Wolfgang Bumiller
2021-10-27 11:22 ` [pbs-devel] [PATCH proxmox-backup v3 10/13] ui: PruneInputPanel: add keepReason 'protected' for protected backups Dominik Csapak
2021-10-27 11:22 ` [pbs-devel] [PATCH proxmox-backup v3 11/13] ui: add protected icon to snapshots Dominik Csapak
2021-10-27 11:22 ` [pbs-devel] [PATCH proxmox-backup v3 12/13] fix #3602: ui: datastore/Content: add action to set protection status Dominik Csapak
2021-10-27 11:22 ` [pbs-devel] [PATCH proxmox-backup v3 13/13] docs: add info about protection flag to client docs Dominik Csapak
2021-10-28  9:33 ` [pbs-devel] applied series: [PATCH proxmox-backup v3 00/13] add 'protected' setting for snapshots Wolfgang Bumiller

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=20211028090544.hdzw336rqrxb4juc@olga.proxmox.com \
    --to=w.bumiller@proxmox.com \
    --cc=d.csapak@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal