]> git.proxmox.com Git - pve-container.git/commitdiff
Set backup lock during stop and suspend backups
authorFabian Grünbichler <f.gruenbichler@proxmox.com>
Fri, 15 Jan 2016 10:40:09 +0000 (11:40 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 15 Jan 2016 15:54:55 +0000 (16:54 +0100)
Correctly set a 'backup' lock while a 'stop' or 'suspend'
mode backup is in progress.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
src/PVE/VZDump/LXC.pm

index 7f27f0bca4bd62b16c1d07af977c1c76242aa1ea..707ca391b4af6e6b1282d0a62f1130707d0a8009 100644 (file)
@@ -94,6 +94,24 @@ my $check_mountpoint_empty = sub {
     });
 };
 
+my $lockconfig = sub {
+    my ($self, $vmid) = @_;
+    my $conf = PVE::LXC::load_config($vmid);
+    PVE::LXC::check_lock($conf);
+    $conf->{lock} = 'backup';
+    PVE::LXC::write_config($vmid, $conf);
+};
+
+my $unlockconfig = sub {
+    my ($self, $vmid) = @_;
+    my $conf = PVE::LXC::load_config($vmid);
+
+    if ($conf->{lock} && $conf->{lock} eq 'backup') {
+       delete $conf->{lock};
+       PVE::LXC::write_config($vmid, $conf);
+    }
+};
+
 sub prepare {
     my ($self, $task, $vmid, $mode) = @_;
 
@@ -144,11 +162,13 @@ sub prepare {
        # set snapshot_count (freezes CT it snapshot_count > 1)
        $task->{snapshot_count} = scalar(@$volid_list);
     } elsif ($mode eq 'stop') {
+       &$lockconfig($self, $vmid);
        my $rootdir = $default_mount_point;
        mkpath $rootdir;
        &$check_mountpoint_empty($rootdir);
        PVE::Storage::activate_volumes($storage_cfg, $volid_list);
     } elsif ($mode eq 'suspend') {
+       &$lockconfig($self, $vmid);
        my $pid = PVE::LXC::find_lxc_pid($vmid);
        foreach my $disk (@$disks) {
            $disk->{dir} = "/proc/$pid/root$disk->{mp}";
@@ -175,6 +195,8 @@ sub lock_vm {
 sub unlock_vm {
     my ($self, $vmid) = @_;
 
+    &$unlockconfig($self, $vmid);
+
     PVE::LXC::lock_release($vmid);
 }
 
@@ -262,6 +284,7 @@ sub assemble {
     mkpath "$tmpdir/etc/vzdump/";
 
     my $conf = PVE::LXC::load_config($vmid);
+    delete $conf->{lock};
     delete $conf->{snapshots};
     delete $conf->{'pve.parent'};