[pve-devel] [PATCH] block-job-complete : retry if block job cannot be complete

Dietmar Maurer dietmar at proxmox.com
Sun Nov 9 16:27:45 CET 2014


Do you think it would solve the problem if we use qmp events instead?

> Even if we check the busy flag, we can have sometime race condition if new
> write are coming between the query-block-job and the block-job-complete.
> 
> block-job-complete throw an error "The active block job for device '%(name)'
> cannot be completed"
> 
> we just need to retry in this case.
> 
> Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
> ---
>  PVE/QemuServer.pm |   16 ++++++++++------
>  1 file changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 778fb08..5222f29
> 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -5192,7 +5192,16 @@ sub qemu_drive_mirror {
>                  print "transferred: $transferred bytes remaining: $remaining bytes
> total: $total bytes progression: $percent % busy: $busy\n";
> 
>  		if ($stat->{len} == $stat->{offset}) {
> -		    last if $busy eq 'false';
> +		    if ($busy eq 'false'){
> +
> +			last if $vmiddst != $vmid;
> +
> +			# try to switch the disk if source and destination are on
> the same guest
> +			eval { vm_mon_cmd($vmid, "block-job-complete",
> device => "drive-$drive") };
> +			last if !$@;
> +			die $@ if $@ !~ m/cannot be completed/;
> +		    }
> +
>  		    if ($count > $maxwait) {
>  		        # if too much writes to disk occurs at the end of migration
>  		        #the disk needs to be freezed to be able to complete the
> migration @@ -5205,11 +5214,6 @@ sub qemu_drive_mirror {
>  		sleep 1;
>  	    }
> 
> -	    if ($vmiddst == $vmid) {
> -		# switch the disk if source and destination are on the same guest
> -		vm_mon_cmd($vmid, "block-job-complete", device => "drive-
> $drive");
> -	    }
> -
>  	    vm_resume($vmid, 1) if $frozen;
> 
>  	};
> --
> 1.7.10.4
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel





More information about the pve-devel mailing list