mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-05-08 07:20:18 +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";
|
||||
|
||||
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;
|
||||
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user