[pve-devel] [PATCH V4 guset-common] Remove noerr form replication.

Thomas Lamprecht t.lamprecht at proxmox.com
Tue Dec 12 08:24:11 CET 2017


On 12/07/2017 12:06 PM, Wolfgang Link wrote:
> We will handle this errors in the API and decide what to do.

Most stuff is indentation change, so mail look more noisy than it is.

In general OK, *but* we need a to handle package versions of this, i.e.:
The package version of guest-common which adds this needs to break earlier
managers and the version of pve-manager which adds the manager patches needs
to add a versioned dependency on guest-common in the respective control file.
It's just the saner and user-friendlier way to do things.

Reviewed-by: Thomas Lamprecht <t.lamprecht at proxmox.com>

> ---
>  PVE/Replication.pm | 95 +++++++++++++++++++++++-------------------------------
>  1 file changed, 41 insertions(+), 54 deletions(-)
> 
> diff --git a/PVE/Replication.pm b/PVE/Replication.pm
> index c25ed44..9bc4e61 100644
> --- a/PVE/Replication.pm
> +++ b/PVE/Replication.pm
> @@ -304,7 +304,7 @@ sub replicate {
>  }
>  
>  my $run_replication_nolock = sub {
> -    my ($guest_class, $jobcfg, $iteration, $start_time, $logfunc, $noerr, $verbose) = @_;
> +    my ($guest_class, $jobcfg, $iteration, $start_time, $logfunc, $verbose) = @_;
>  
>      my $jobid = $jobcfg->{id};
>  
> @@ -313,79 +313,66 @@ my $run_replication_nolock = sub {
>      # we normaly write errors into the state file,
>      # but we also catch unexpected errors and log them to syslog
>      # (for examply when there are problems writing the state file)
> -    eval {
> -	my $state = PVE::ReplicationState::read_job_state($jobcfg);
>  
> -	PVE::ReplicationState::record_job_start($jobcfg, $state, $start_time, $iteration);
> +    my $state = PVE::ReplicationState::read_job_state($jobcfg);
> +
> +    PVE::ReplicationState::record_job_start($jobcfg, $state, $start_time, $iteration);
>  
> -	my $t0 = [gettimeofday];
> +    my $t0 = [gettimeofday];
>  
> -	mkdir $PVE::ReplicationState::replicate_logdir;
> -	my $logfile = PVE::ReplicationState::job_logfile_name($jobid);
> -	open(my $logfd, '>', $logfile) ||
> -	    die "unable to open replication log '$logfile' - $!\n";
> +    mkdir $PVE::ReplicationState::replicate_logdir;
> +    my $logfile = PVE::ReplicationState::job_logfile_name($jobid);
> +    open(my $logfd, '>', $logfile) ||
> +	die "unable to open replication log '$logfile' - $!\n";
>  
> -	my $logfunc_wrapper = sub {
> -	    my ($msg) = @_;
> +    my $logfunc_wrapper = sub {
> +	my ($msg) = @_;
>  
> -	    my $ctime = get_log_time();
> -	    print $logfd "$ctime $jobid: $msg\n";
> -	    if ($logfunc) {
> -		if ($verbose) {
> -		    $logfunc->("$ctime $jobid: $msg");
> -		} else {
> -		    $logfunc->($msg);
> -		}
> +	my $ctime = get_log_time();
> +	print $logfd "$ctime $jobid: $msg\n";
> +	if ($logfunc) {
> +	    if ($verbose) {
> +		$logfunc->("$ctime $jobid: $msg");
> +	    } else {
> +		$logfunc->($msg);
>  	    }
> -	};
> +	}
> +    };
>  
> -	$logfunc_wrapper->("start replication job");
> +    $logfunc_wrapper->("start replication job");
>  
> -	eval {
> -	    $volumes = replicate($guest_class, $jobcfg, $state, $start_time, $logfunc_wrapper);
> -	};
> -	my $err = $@;
> +    eval {
> +	$volumes = replicate($guest_class, $jobcfg, $state, $start_time, $logfunc_wrapper);
> +    };
> +    my $err = $@;
>  
> -	if ($err) {
> -	    my $msg = "end replication job with error: $err";
> -	    chomp $msg;
> -	    $logfunc_wrapper->($msg);
> -	} else {
> -	    $logfunc_wrapper->("end replication job");
> -	}
> +    if ($err) {
> +	my $msg = "end replication job with error: $err";
> +	chomp $msg;
> +	$logfunc_wrapper->($msg);
> +    } else {
> +	$logfunc_wrapper->("end replication job");
> +    }
>  
> -	PVE::ReplicationState::record_job_end($jobcfg, $state, $start_time, tv_interval($t0), $err);
> +    PVE::ReplicationState::record_job_end($jobcfg, $state, $start_time, tv_interval($t0), $err);
>  
> -	close($logfd);
> +    close($logfd);
>  
> -	die $err if $err && !$noerr;
> -    };
> -    if (my $err = $@) {
> -	if ($noerr) {
> -	    warn "$jobid: got unexpected replication job error - $err";
> -	} else {
> -	    die $err;
> -	}
> -    }
> +    die $err if $err;
>  
>      return $volumes;
>  };
>  
>  sub run_replication {
> -    my ($guest_class, $jobcfg, $iteration, $start_time, $logfunc, $noerr, $verbose) = @_;
> +    my ($guest_class, $jobcfg, $iteration, $start_time, $logfunc, $verbose) = @_;
>  
>      my $volumes;
>  
> -    eval {
> -	my $timeout = 2; # do not wait too long - we repeat periodically anyways
> -	$volumes = PVE::GuestHelpers::guest_migration_lock(
> -	    $jobcfg->{guest}, $timeout, $run_replication_nolock,
> -	    $guest_class, $jobcfg, $iteration, $start_time, $logfunc, $noerr, $verbose);
> -    };
> -    if (my $err = $@) {
> -	return undef if $noerr;
> -	die $err;
> -    }
> +    my $timeout = 2; # do not wait too long - we repeat periodically anyways
> +    $volumes = PVE::GuestHelpers::guest_migration_lock(
> +	$jobcfg->{guest}, $timeout, $run_replication_nolock,
> +	$guest_class, $jobcfg, $iteration, $start_time, $logfunc, $verbose);
> +
>      return $volumes;
>  }
>  
> 





More information about the pve-devel mailing list