mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-03 11:35:19 +00:00
qemu: properly quit migration with abort_on_error
When EIO comes to qemu while it's replying to qemuMigrationUpdateJobStatus(), qemu blocks, the migration of RAM can complete in the meantime, and when qemu unblocks, it sends us BLOCK_IO_ERROR plus migrations "status": "complete". Even though we act upon the BLOCK_IO_ERROR by setting the proper state of the domain, the call still waits for the proper reply on monitor for query_migrate and after it gets it, it checks that migration is completed and the migration is finished. This is what abort_on_error flag was meant for (we can migrate with these errors, but this flag must inhibit such behaviour). Changing the order of the steps guarantees the flag works properly. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1045833 Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
parent
f6ec6af8a6
commit
837154a151
@ -1812,15 +1812,15 @@ qemuMigrationWaitForCompletion(virQEMUDriverPtr driver, virDomainObjPtr vm,
|
||||
/* Poll every 50ms for progress & to allow cancellation */
|
||||
struct timespec ts = { .tv_sec = 0, .tv_nsec = 50 * 1000 * 1000ull };
|
||||
|
||||
if (qemuMigrationUpdateJobStatus(driver, vm, job, asyncJob) < 0)
|
||||
goto cleanup;
|
||||
|
||||
/* cancel migration if disk I/O error is emitted while migrating */
|
||||
if (abort_on_error &&
|
||||
virDomainObjGetState(vm, &pauseReason) == VIR_DOMAIN_PAUSED &&
|
||||
pauseReason == VIR_DOMAIN_PAUSED_IOERROR)
|
||||
goto cancel;
|
||||
|
||||
if (qemuMigrationUpdateJobStatus(driver, vm, job, asyncJob) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (dconn && virConnectIsAlive(dconn) <= 0) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("Lost connection to destination host"));
|
||||
|
Loading…
Reference in New Issue
Block a user