public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Fiona Ebner <f.ebner@proxmox.com>
To: pve-devel@lists.proxmox.com, s.hanreich@proxmox.com
Subject: Re: [pve-devel] [PATCH pve-guest-common 1/1] add pre/post-snapshot hooks
Date: Mon, 14 Nov 2022 09:51:32 +0100	[thread overview]
Message-ID: <b6cd4181-8476-69a4-5f47-e16bea643e58@proxmox.com> (raw)
In-Reply-To: <20220922115421.1406405-3-s.hanreich@proxmox.com>

Am 22.09.22 um 13:54 schrieb Stefan Hanreich:
> Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com>
> ---
> 

Should there be a third hook that's called when the snapshot fails? That
would allow doing cleanup in all cases. Could still be added later when
actually requested by users of course.

What are the common use cases you have in mind for these hooks?

> I have opted to include the snapshot hooks in the abstract class, since this
> seemed like the more straightforward way.
> The other option would have been duplicating the calls of the hooks into the
> respective Backends, but I couldn't see any upsides to this.
> 
> This hook runs before the preparation steps, since otherwise in case of a
> failing pre-snapshot hook the VM/CT is left in a locked state, which I would
> need to clean up, which would add unnecessary complexity imo.
> 
> Otoh, there is a case to be made that the hook should only run after we checked
> every precondition and are as certain as we can be that the snapshot will be
> successfully created. This would be more convenient from a user's pov.
> This can be particularly convenient as it would avoid errors with user scripts
> that are not idempotent. Although those would still fail in case of a failure
> during the snapshotting process.

Calling the hook script only after setting the lock in the config would
add protection against other modifications happening at the same time.
Stupid example: if we add another such hook outside a lock, and both
that and the 'pre-snapshot' hook would modify the config, they could
interfere when happening right after another. But it doesn't need to be
another hook script, the config modification could also come from
somewhere else.

Although this approach does requires users to pass the --skiplock option
to modify the config if using our API/CLI. And we need to repeat the
checks after calling the hook script, because they might not apply any
more ;)

> 
> What do you think would be the better solution?
> 
>  src/PVE/AbstractConfig.pm | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/src/PVE/AbstractConfig.pm b/src/PVE/AbstractConfig.pm
> index a0c0bc6..8052fde 100644
> --- a/src/PVE/AbstractConfig.pm
> +++ b/src/PVE/AbstractConfig.pm
> @@ -799,11 +799,15 @@ sub __snapshot_activate_storages {
>  sub snapshot_create {
>      my ($class, $vmid, $snapname, $save_vmstate, $comment) = @_;
>  
> +    my $conf = $class->load_config($vmid);
> +    PVE::GuestHelpers::exec_hookscript($conf, $vmid, "pre-snapshot", 1);
> +
>      my $snap = $class->__snapshot_prepare($vmid, $snapname, $save_vmstate, $comment);
>  
>      $save_vmstate = 0 if !$snap->{vmstate};
>  
> -    my $conf = $class->load_config($vmid);
> +    # reload config after changes in snapshot preparation step

I think there should be a cfs_update() call?

> +    $conf = $class->load_config($vmid);
>  
>      my ($running, $freezefs) = $class->__snapshot_check_freeze_needed($vmid, $conf, $snap->{vmstate});
>  
> @@ -843,6 +847,8 @@ sub snapshot_create {
>      }
>  
>      $class->__snapshot_commit($vmid, $snapname);
> +
> +    PVE::GuestHelpers::exec_hookscript($conf, $vmid, "post-snapshot");
>  }
>  
>  # Check if the snapshot might still be needed by a replication job.




  reply	other threads:[~2022-11-14  8:52 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-22 11:54 [pve-devel] [PATCH pve-guest-common/pve-docs 0/1] Stefan Hanreich
2022-09-22 11:54 ` [pve-devel] [PATCH pve-docs 1/1] add pre/post snapshot events to example hookscript Stefan Hanreich
2022-09-22 11:54 ` [pve-devel] [PATCH pve-guest-common 1/1] add pre/post-snapshot hooks Stefan Hanreich
2022-11-14  8:51   ` Fiona Ebner [this message]
2022-11-17 11:27     ` Stefan Hanreich
2022-11-18  8:27       ` Fiona Ebner
2022-11-11 10:27 ` [pve-devel] [PATCH pve-guest-common/pve-docs 0/1] Daniel Tschlatscher

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=b6cd4181-8476-69a4-5f47-e16bea643e58@proxmox.com \
    --to=f.ebner@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    --cc=s.hanreich@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