mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-05-02 09:13:06 +00:00
qemu-mirror : block job complete : use ready flag
Since qemu 2.2, a new "ready" flag has been added to blockjob http://git.qemu.org/?p=qemu.git;a=commit;h=ef6dbf1e46ebd1d41ab669df5bba0bbdec6bd374 to known if we can complete it. we can't use len==offset to known if all block are mirrored, because behaviour will change soon in qemu 2.3 http://git.qemu.org/?p=qemu.git;a=commit;h=b21c76529d55bf7bb02ac736b312f5f8bf033ea2 "block/mirror: Improve progress report Instead of taking the total length of the block device as the block job's length, use the number of dirty sectors. The progress is now the number of sectors mirrored to the target block device. Note that this may result in the job's length increasing during operation, which is however in fact desirable. " Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
This commit is contained in:
parent
d483fa010c
commit
ad123d97f9
@ -6080,11 +6080,6 @@ sub qemu_img_format {
|
||||
sub qemu_drive_mirror {
|
||||
my ($vmid, $drive, $dst_volid, $vmiddst) = @_;
|
||||
|
||||
my $count = 0;
|
||||
my $old_len = 0;
|
||||
my $frozen = undef;
|
||||
my $maxwait = 120;
|
||||
|
||||
my $storecfg = PVE::Storage::config();
|
||||
my ($dst_storeid, $dst_volname) = PVE::Storage::parse_volume_id($dst_volid);
|
||||
|
||||
@ -6113,17 +6108,18 @@ sub qemu_drive_mirror {
|
||||
die "error job is not mirroring" if $stat->{type} ne "mirror";
|
||||
|
||||
my $busy = $stat->{busy};
|
||||
my $ready = $stat->{ready};
|
||||
|
||||
if (my $total = $stat->{len}) {
|
||||
my $transferred = $stat->{offset} || 0;
|
||||
my $remaining = $total - $transferred;
|
||||
my $percent = sprintf "%.2f", ($transferred * 100 / $total);
|
||||
|
||||
print "transferred: $transferred bytes remaining: $remaining bytes total: $total bytes progression: $percent % busy: $busy\n";
|
||||
print "transferred: $transferred bytes remaining: $remaining bytes total: $total bytes progression: $percent % busy: $busy ready: $ready \n";
|
||||
}
|
||||
|
||||
if ($stat->{len} == $stat->{offset}) {
|
||||
if ($busy eq 'false') {
|
||||
|
||||
if ($stat->{ready} eq 'true') {
|
||||
|
||||
last if $vmiddst != $vmid;
|
||||
|
||||
@ -6132,20 +6128,9 @@ sub qemu_drive_mirror {
|
||||
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
|
||||
vm_suspend($vmid,1);
|
||||
$frozen = 1;
|
||||
}
|
||||
$count ++
|
||||
}
|
||||
$old_len = $stat->{offset};
|
||||
sleep 1;
|
||||
}
|
||||
|
||||
vm_resume($vmid, 1) if $frozen;
|
||||
|
||||
};
|
||||
my $err = $@;
|
||||
|
Loading…
Reference in New Issue
Block a user