mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-31 10:05:31 +00:00
qemu: blockjob: Don't report block job progress at 100% if job isn't ready
Some clients poll virDomainGetBlockJobInfo rather than wait for the VIR_DOMAIN_BLOCK_JOB_READY event. In some cases qemu can get to 100% and still not reach the synchronised phase. Initiating a pivot in that case will fail. Given that computers are interacting here, the error that the job can't be finalized yet is not handled very well by those specific implementations. Our docs now correctly state to use the event. We already do a similar output adjustment in case when the progress is not available from qemu as in that case we'd report 0 out of 0, which some apps also incorrectly considered as 100% complete. In this case we subtract 1 from the progress if the ready state is not signalled by qemu if the progress was at 100% otherwise. Signed-off-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
parent
52bf9ada8e
commit
73ce3911aa
@ -17440,6 +17440,14 @@ qemuBlockJobInfoTranslate(qemuMonitorBlockJobInfoPtr rawInfo,
|
||||
}
|
||||
}
|
||||
|
||||
/* If qemu reports that it's not ready yet don't make the job go to
|
||||
* cur == end as some apps wrote code polling this instead of waiting for
|
||||
* the ready event */
|
||||
if (rawInfo->ready == 0 &&
|
||||
info->cur == info->end &&
|
||||
info->cur > 0)
|
||||
info->cur -= 1;
|
||||
|
||||
info->type = rawInfo->type;
|
||||
if (info->type == VIR_DOMAIN_BLOCK_JOB_TYPE_COMMIT &&
|
||||
disk->mirrorJob == VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT)
|
||||
|
Loading…
Reference in New Issue
Block a user