]> git.proxmox.com Git - qemu-server.git/commitdiff
PVE/QemuMigrate.pm - use PVE::QemuServer::foreach_volid
authorDietmar Maurer <dietmar@proxmox.com>
Tue, 13 Jun 2017 06:32:37 +0000 (08:32 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 13 Jun 2017 09:26:47 +0000 (11:26 +0200)
PVE/QemuMigrate.pm

index 22c0d7dee8cf6f1264adc518cdcafb054467171f..7c4dd90a782b4c2317a34bd784edb5250ef33495 100644 (file)
@@ -269,21 +269,22 @@ sub sync_disks {
        }
 
        my $test_volid = sub {
-           my ($volid, $is_cdrom, $snapname) = @_;
-
-           return if !$volid;
+           my ($volid, $attr) = @_;
 
            if ($volid =~ m|^/|) {
                $local_volumes->{$volid} = 'config';
                die "local file/device\n";
            }
 
-           if ($is_cdrom) {
+           my $snaprefs = $attr->{referenced_in_snapshot};
+
+           if ($attr->{cdrom}) {
                if ($volid eq 'cdrom') {
                    my $msg = "can't migrate local cdrom drive";
-                   $msg .= " (referenced in snapshot '$snapname')"
-                       if defined($snapname);
-
+                   if (defined($snaprefs) && !$attr->{referenced_in_config))
+                       my $snapnames = join(', ', sort keys %$snaprefs);
+                       $msg .= " (referenced in snapshot - $snapnames)"
+                   }
                    &$log_error("$msg\n");
                    return;
                }
@@ -301,16 +302,16 @@ sub sync_disks {
 
            $sharedvm = 0;
 
-           $local_volumes->{$volid} = defined($snapname) ? 'snapshot' : 'config';
+           $local_volumes->{$volid} = $attr->{referenced_in_config) ? 'config' : 'snapshot';
 
-           die "local cdrom image\n" if $is_cdrom;
+           die "local cdrom image\n" if $attr->{cdrom};
 
            my ($path, $owner) = PVE::Storage::path($self->{storecfg}, $volid);
 
            die "owned by other VM (owner = VM $owner)\n"
                if !$owner || ($owner != $self->{vmid});
 
-           if (defined($snapname)) {
+           if (defined($snaprefs)) {
                # we cannot migrate shapshots on local storage
                # exceptions: 'zfspool' or 'qcow2' files (on directory storage)
 
@@ -325,26 +326,13 @@ sub sync_disks {
                if PVE::Storage::volume_is_base_and_used($self->{storecfg}, $volid);
        };
 
-       my $test_drive = sub {
-           my ($ds, $drive, $snapname) = @_;
-
-           eval {
-               &$test_volid($drive->{file}, PVE::QemuServer::drive_is_cdrom($drive), $snapname);
-           };
-
-           &$log_error($@, $drive->{file}) if $@;
-       };
-
-       foreach my $snapname (keys %{$conf->{snapshots}}) {
-           eval {
-               &$test_volid($conf->{snapshots}->{$snapname}->{'vmstate'}, 0, undef)
-                   if defined($conf->{snapshots}->{$snapname}->{'vmstate'});
-           };
-           &$log_error($@, $conf->{snapshots}->{$snapname}->{'vmstate'}) if $@;
-
-           PVE::QemuServer::foreach_drive($conf->{snapshots}->{$snapname}, $test_drive, $snapname);
-       }
-       PVE::QemuServer::foreach_drive($conf, $test_drive);
+       PVE::QemuServer::foreach_volid($conf, sub {
+           my ($volid, $attr) = @_;
+           eval { $test_volid->($volid, $attr); };
+           if (my $err = $@) {
+               &$log_error($err, $volid);
+           }
+        });
 
        foreach my $vol (sort keys %$local_volumes) {
            if ($local_volumes->{$vol} eq 'storage') {