[pve-devel] [PATCH 1/3] Change behavior at error

Wolfgang Link w.link at proxmox.com
Fri Jun 12 11:52:07 CEST 2015


Now if an error occurs, the job will not stopped.
It will continue and send emails so long the error is gone or somebody stopped it.

Signed-off-by: Wolfgang Link <w.link at proxmox.com>
---
 pve-zsync | 67 ++++++++++++++++++++++++++++++++-------------------------------
 1 file changed, 34 insertions(+), 33 deletions(-)

diff --git a/pve-zsync b/pve-zsync
index 0023aad..ed65947 100644
--- a/pve-zsync
+++ b/pve-zsync
@@ -246,6 +246,7 @@ sub read_state {
     if (!-e $STATE) {
 	my $new_fh = IO::File->new("> $STATE");
 	die "Could not create $STATE: $!\n" if !$new_fh;
+	print $new_fh "{}";
 	close($new_fh);
 	return undef;
     }
@@ -496,9 +497,8 @@ sub sync {
 	$job = get_job($param);
     };
 
-    if ($job && $job->{state} ne "ok") {
-	print "To reset error state use $PROGNAME enable\n" if $job->{state} eq "error" ;
-	die "Sync will not done! Status: $job->{state}\n";
+    if ($job && $job->{state} eq "syncing") {
+	die "Job --source $param->{source} --name $param->{name} is syncing at the moment";
     }
 
     my $dest = parse_target($param->{dest});
@@ -509,46 +509,47 @@ sub sync {
 
 	($source->{old_snap},$source->{last_snap}) = snapshot_get($source, $dest, $param->{maxsnap}, $param->{name});
 
-	eval{
-	    snapshot_add($source, $dest, $param->{name}, $date);
+	snapshot_add($source, $dest, $param->{name}, $date);
 
-	    send_image($source, $dest, $param);
+	send_image($source, $dest, $param);
+
+	snapshot_destroy($source, $dest, $param->{method}, $source->{old_snap}) if ($source->{destroy} && $source->{old_snap});
 
-	    snapshot_destroy($source, $dest, $param->{method}, $source->{old_snap}) if ($source->{destroy} && $source->{old_snap});
-	};
-	if(my $err = $@) {
-	    if ($job) {
-		$job->{state} = "error";
-		update_state($job);
-		unlock($lock_fh);
-		close($lock_fh);
-	    }
-	    die "$err\n";
-	}
     };
 
     if ($job) {
-	die "Job --source $param->{source} --name $param->{name} is syncing" if $job->{state} eq "syncing";
 	$job->{state} = "syncing";
 	update_state($job);
     }
 
-    if ($source->{vmid}) {
-        die "VM $source->{vmid} doesn't exist\n" if !vm_exists($source);
-	my $disks = get_disks($source);
-
-        foreach my $disk (sort keys %{$disks}) {
-	    $source->{all} = $disks->{$disk}->{all};
-	    $source->{pool} = $disks->{$disk}->{pool};
-	    $source->{path} = $disks->{$disk}->{path} if $disks->{$disk}->{path};
-	    $source->{last_part} = $disks->{$disk}->{last_part};
+    eval{
+	if ($source->{vmid}) {
+	    die "VM $source->{vmid} doesn't exist\n" if !vm_exists($source);
+	    my $disks = get_disks($source);
+
+	    foreach my $disk (sort keys %{$disks}) {
+		$source->{all} = $disks->{$disk}->{all};
+		$source->{pool} = $disks->{$disk}->{pool};
+		$source->{path} = $disks->{$disk}->{path} if $disks->{$disk}->{path};
+		$source->{last_part} = $disks->{$disk}->{last_part};
+		&$sync_path($source, $dest, $job, $param, $date);
+	    }
+	    if ($param->{method} eq "ssh") {
+		send_config($source, $dest,'ssh');
+	    }
+	} else {
 	    &$sync_path($source, $dest, $job, $param, $date);
 	}
-	if ($param->{method} eq "ssh") {
-	    send_config($source, $dest,'ssh');
+    };
+    if(my $err = $@) {
+	if ($job) {
+	    $job->{state} = "error";
+	    update_state($job);
+	    unlock($lock_fh);
+	    close($lock_fh);
+	    print "Job --source $param->{source} --name $param->{name} got an ERROR!!!\nERROR Message:\n";
 	}
-    } else {
-	&$sync_path($source, $dest, $job, $param, $date);
+	die "$err\n";
     }
 
     if ($job) {
@@ -671,7 +672,7 @@ sub run_cmd {
     print Dumper $cmd if $DEBUG;
     my $output = `$cmd 2>&1`;
 
-    die $output if 0 != $?;
+    die "COMMAND:\n\t$cmd\nGET ERROR:\n\t$output" if 0 != $?;
 
     chomp($output);
     print Dumper $output if $DEBUG;
@@ -1233,7 +1234,7 @@ add sync job from local VM to remote ZFS Server
 pve-zsync create -source=100 -dest=192.168.1.2:zfspool
 
 =head1 IMPORTANT FILES
- 
+
 Cron jobs are stored at                                 /etc/cron.d/pve-zsync
 
 The VM config get copied on the destination machine to  /var/pve-zsync/
-- 
2.1.4





More information about the pve-devel mailing list