mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-05-08 22:13:06 +00:00
block-job-complete : retry if block job cannot be complete
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@odiso.com>
This commit is contained in:
parent
2b8245f11b
commit
21ccdb506a
@ -5192,7 +5192,16 @@ sub qemu_drive_mirror {
|
|||||||
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\n";
|
||||||
|
|
||||||
if ($stat->{len} == $stat->{offset}) {
|
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 ($count > $maxwait) {
|
||||||
# if too much writes to disk occurs at the end of migration
|
# 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
|
#the disk needs to be freezed to be able to complete the migration
|
||||||
@ -5205,11 +5214,6 @@ sub qemu_drive_mirror {
|
|||||||
sleep 1;
|
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;
|
vm_resume($vmid, 1) if $frozen;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user