]> git.proxmox.com Git - qemu-server.git/commitdiff
updates for async shapshot patch
authorDietmar Maurer <dietmar@proxmox.com>
Mon, 24 Sep 2012 08:43:19 +0000 (10:43 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Mon, 24 Sep 2012 08:43:19 +0000 (10:43 +0200)
PVE/QMPClient.pm
PVE/QemuServer.pm

index 6fcce685aefd0e92ce79ab631acacdfdaeaf5360..d026f4d4c3012203d96660a311b1890e84e6aa18 100755 (executable)
@@ -75,8 +75,9 @@ sub cmd {
            $timeout = 60*60; # 1 hour
        } elsif ($cmd->{execute} =~ m/^(eject|change)/) {
            $timeout = 60; # note: cdrom mount command is slow
-       } elsif ($cmd->{execute} eq 'snapshot-start' ||
-                $cmd->{execute} eq 'snapshot-end' ||
+       } elsif ($cmd->{execute} eq 'savevm-start' ||
+                $cmd->{execute} eq 'savevm-end' ||
+                $cmd->{execute} eq 'query-savevm' ||
                 $cmd->{execute} eq 'delete-drive-snapshot' ||
                 $cmd->{execute} eq 'snapshot-drive'  ) {
            $timeout = 10*60; # 10 mins ?
index a45052f392749515a28037da10f5287c807f6f26..d5266a0c4a02346153eb2dff80a113ee1fab3141 100644 (file)
@@ -3805,6 +3805,24 @@ sub snapshot_rollback {
     lock_config($vmid, $updatefn);
 }
 
+my $savevm_wait = sub {
+    my ($vmid) = @_;
+
+    for(;;) {
+       my $stat = PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "query-savevm");
+       if (!$stat->{status}) {
+           die "savevm not active\n";
+       } elsif ($stat->{status} eq 'active') {
+           sleep(1);
+           next;
+       } elsif ($stat->{status} eq 'completed') {
+           last;
+       } else {
+           die "query-savevm returned status '$stat->{status}'\n";
+       }
+    }
+};
+
 sub snapshot_create {
     my ($vmid, $snapname, $save_vmstate, $freezefs, $comment) = @_;
 
@@ -3824,9 +3842,10 @@ sub snapshot_create {
        if ($running) {
            if ($snap->{vmstate}) {
                my $path = PVE::Storage::path($storecfg, $snap->{vmstate});     
-               vm_mon_cmd($vmid, "snapshot-start", statefile => $path);
+               vm_mon_cmd($vmid, "savevm-start", statefile => $path);
+               &$savevm_wait($vmid);
            } else {
-               vm_mon_cmd($vmid, "snapshot-start");
+               vm_mon_cmd($vmid, "savevm-start");
            }
        };
 
@@ -3849,7 +3868,7 @@ sub snapshot_create {
     eval { gqa_unfreezefs($vmid) if $running && $freezefs; };
     warn $@ if $@;
 
-    eval { vm_mon_cmd($vmid, "snapshot-end") if $running; };
+    eval { vm_mon_cmd($vmid, "savevm-end") if $running; };
     warn $@ if $@;
 
     if ($err) {