]> git.proxmox.com Git - qemu-server.git/commitdiff
add better checks to test if backup was successful
authorDietmar Maurer <dietmar@proxmox.com>
Tue, 12 Mar 2013 07:50:02 +0000 (08:50 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 12 Mar 2013 07:50:02 +0000 (08:50 +0100)
PVE/VZDump/QemuServer.pm

index d85845ec54cce685c5df3ffe153f2cc3ef44fa9e..0004cc28050d7514f96606fbedd1ed3eec1d4a82 100644 (file)
@@ -403,13 +403,13 @@ sub archive {
 
        while(1) {
            $status = PVE::QemuServer::vm_mon_cmd($vmid, 'query-backup');
-           my $total = $status->{total};
-           $transferred = $status->{transferred};
+           my $total = $status->{total} || 0;
+           $transferred = $status->{transferred} || 0;
            my $per = $total ? int(($transferred * 100)/$total) : 0;
            my $zero = $status->{'zero-bytes'} || 0;
            my $zero_per = $total ? int(($zero * 100)/$total) : 0;
                    
-           die "got unexpected uuid\n" if $status->{uuid} ne $uuid;
+           die "got unexpected uuid\n" if !$status->{uuid} || ($status->{uuid} ne $uuid);
 
            my $ctime = time();
            my $duration = $ctime - $starttime;
@@ -426,10 +426,16 @@ sub archive {
            my $statusline = "status: $per% ($transferred/$total), " .
                "sparse ${zero_per}% ($zero), duration $duration, " .
                "$mbps_read/$mbps_write MB/s";
-           if ($status->{status} ne 'active') {
+           my $res = $status->{status} || 'unknown';
+           if ($res ne 'active') {
                $self->loginfo($statusline);
                die(($status->{errmsg} || "unknown error") . "\n")
-                   if $status->{status} eq 'error';
+                   if $res eq 'error';
+               die "got unexpected status '$res'\n"
+                   if $res ne 'done';
+               die "got wrong number of transfered bytes ($total != $transferred)\n"
+                   if ($res eq 'done') && ($total != $transferred);
+
                last;
            }
            if ($per != $last_per && ($timediff > 2)) {