[libvirt] [PATCH 8/9] Fix preservation of errors across migration steps
Matthias Bolte
matthias.bolte at googlemail.com
Wed May 25 09:11:21 UTC 2011
2011/5/24 Daniel P. Berrange <berrange at redhat.com>:
> When doing migration, if an error occurs in Perform, it must not
> be overwritten during Finish/Confirm steps. If an error occurs
> in Finish, it must not be overwritten in Confirm.
>
> Previous commit a9d12c2444e43a0d3e5135eb15b4b62a7c011427 added
> code to qemudDomainMigrateFinish2 to preserve the error. This
> is not the right place, because it is not applicable in non-p2p
> migration. The src/libvirt.c virDomainMigrateV2/3 methods need
> code to preserve errors for non-p2p migration, while the
> doPeer2PeerMigrate2 and doPeer2PeerMigrate3 methods contain
> code to preverse errors for p2p migration.
>
> Remove the bogus error preservation from qemudDomainMigrateFinish2
> and qemudDomainMigrateFinish3.
>
> Fix virDomainMigrateV3 and doPeer2PeerMigrate3 so that they
> preserve any error hit during the Finish3 step, before invoking
> Confirm3.
>
> Finally if qemuMigrationFinish fails to resume the CPUs, it must
> preserve the error before tearing down the VM, so that VM cleanup
> doesn't overwrite it.
>
> * src/libvirt.c: Preserve error before invoking Confirm3
> * src/qemu/qemu_driver.c: Remove bogus error preservation
> code in qemudDomainMigrateFinish2/qemudDomainMigrateFinish3
> * src/qemu/qemu_migration.c: Preserve error before invoking Confirm3
> and after resume fails in qemuMigrationFinish.
> ---
> src/libvirt.c | 6 ++++++
> src/qemu/qemu_driver.c | 24 ------------------------
> src/qemu/qemu_migration.c | 23 ++++++++++++++++++++---
> 3 files changed, 26 insertions(+), 27 deletions(-)
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index 280b8cb..a0365ac 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
> @@ -2382,6 +2394,11 @@ cleanup:
> if (event)
> qemuDomainEventQueue(driver, event);
> qemuMigrationCookieFree(mig);
> + if (orig_err) {
> + virSetError(orig_err);
> + virFreeError(orig_err);
> + orig_err = virGetLastError();
> + }
> return dom;
> }
The last virGetLastError isn't necessary and can be removed, can't it?
ACK.
Matthias
More information about the libvir-list
mailing list