[pve-devel] [pve-manager] snapshot rollback: cleanup replication snapshots
Dietmar Maurer
dietmar at proxmox.com
Mon Jun 12 08:18:12 CEST 2017
We want to remove all replication snapshots before rollback (some storage
backends (i.e. zfs) rejects rollback if there are newer snapshots).
Next replication can simply use the rolled-backed snapshot as base.
Signed-off-by: Dietmar Maurer <dietmar at proxmox.com>
---
PVE/API2/Qemu.pm | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 54db5ab..e495d90 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -16,6 +16,7 @@ use PVE::Storage;
use PVE::JSONSchema qw(get_standard_option);
use PVE::RESTHandler;
use PVE::ReplicationConfig;
+use PVE::Replication;
use PVE::GuestHelpers;
use PVE::QemuConfig;
use PVE::QemuServer;
@@ -3390,11 +3391,29 @@ __PACKAGE__->register_method({
my $snapname = extract_param($param, 'snapname');
my $realcmd = sub {
+ my $storecfg = PVE::Storage::config();
+ my $repl_conf = PVE::ReplicationConfig->new();
+ if ($repl_conf->check_for_existing_jobs($vmid, 1)) {
+ # remove all replication snapshots
+ my $conf = PVE::QemuConfig->load_config($vmid);
+ my $volumes = PVE::QemuConfig->get_replicatable_volumes($storecfg, $conf);
+ my $sorted_volids = [ sort keys %$volumes ];
+
+ # remove all local replication snapshots (lastsync => 0)
+ my $logfunc = sub { my $line = shift; chomp $line; print "$line\n"; };
+ PVE::Replication::prepare($storecfg, $sorted_volids, undef, 0, undef, $logfunc);
+ }
+
PVE::Cluster::log_msg('info', $authuser, "rollback snapshot VM $vmid: $snapname");
PVE::QemuConfig->snapshot_rollback($vmid, $snapname);
};
- return $rpcenv->fork_worker('qmrollback', $vmid, $authuser, $realcmd);
+ my $worker = sub {
+ # hold migration lock, this makes sure that nobody create replication snapshots
+ return PVE::GuestHelpers::guest_migration_lock($vmid, 10, $realcmd);
+ };
+
+ return $rpcenv->fork_worker('qmrollback', $vmid, $authuser, $worker);
}});
__PACKAGE__->register_method({
--
2.11.0
More information about the pve-devel
mailing list