[pve-devel] [PATCH manager] vzdump: set task mode early to fix a warning

Wolfgang Bumiller w.bumiller at proxmox.com
Thu Aug 18 09:35:00 CEST 2016


when a vzdump script is set and the backup fails early (eg.
when exceeding the number of backups) run_hook_script()
showed an uninitialized value error trying to use
$task->{mode} which is set only after prepare() was called.

This sets $task->{mode} early, still updated later to $stop
if !$running, and changes the condition for whether
cleanup() should be called to not use $task->{mode} (which
makes no real sense anyway) to using the $cleanup hash like
the rest of the code.
---
 PVE/VZDump.pm | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/PVE/VZDump.pm b/PVE/VZDump.pm
index 43d238d..5f77b54 100644
--- a/PVE/VZDump.pm
+++ b/PVE/VZDump.pm
@@ -861,7 +861,7 @@ sub exec_backup_task {
 
 	# prepare
 
-	my $mode = $running ? $opts->{mode} : 'stop';
+	my $mode = $running ? $task->{mode} : 'stop';
 
 	if ($mode eq 'snapshot') {
 	    my %saved_task = %$task;
@@ -875,6 +875,8 @@ sub exec_backup_task {
 	    }
 	}
 
+	$cleanup->{prepared} = 1;
+
 	$task->{mode} = $mode;
 
    	debugmsg ('info', "backup mode: $mode", $logfd);
@@ -1013,7 +1015,7 @@ sub exec_backup_task {
 	    warn $@ if $@;
 	}
 
-	if (defined($task->{mode})) { 
+	if ($cleanup->{prepared}) {
 	    # only call cleanup when necessary (when prepare was executed)
 	    eval { $plugin->cleanup ($task, $vmid) };
 	    warn $@ if $@;
@@ -1096,7 +1098,7 @@ sub exec_backup {
 	    foreach my $vmid (sort @$vmlist) {
 		next if grep { $_ eq  $vmid } @{$opts->{exclude}};
 		next if !$rpcenv->check($authuser, "/vms/$vmid", [ 'VM.Backup' ], 1);
-	        push @$tasklist, { vmid => $vmid,  state => 'todo', plugin => $plugin };
+	        push @$tasklist, { vmid => $vmid,  state => 'todo', plugin => $plugin, mode => $opts->{mode} };
 	    }
 	}
     } else {
@@ -1110,7 +1112,7 @@ sub exec_backup {
 		}
 	    }
 	    $rpcenv->check($authuser, "/vms/$vmid", [ 'VM.Backup' ]);
-	    push @$tasklist, { vmid => $vmid,  state => 'todo', plugin => $plugin };
+	    push @$tasklist, { vmid => $vmid,  state => 'todo', plugin => $plugin, mode => $opts->{mode} };
 	}
     }
 
-- 
2.1.4





More information about the pve-devel mailing list