On Mon, Jul 11, 2011 at 09:25:40AM +0800, Wen Congyang wrote:
At 07/01/2011 06:05 PM, Wen Congyang Write:
> If virDomainSaveConfig() failed, we will return NULL to source,
> and the vm is still available to restart during confirm() step in
> v3 protocol. So we should kill it off in qemuMigrationFinish().
>
> In v2 protocol, we should not set vm to NULL, because we hold
> a reference of vm and should unrefernce it.
>
> ---
> src/qemu/qemu_migration.c | 21 +++++++++++++++++++--
> 1 files changed, 19 insertions(+), 2 deletions(-)
>
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index 800b714..fa98cba 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
> @@ -2471,7 +2471,7 @@ qemuMigrationFinish(struct qemud_driver *driver,
> if (!virDomainObjIsActive(vm)) {
> qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> _("guest unexpectedly quit"));
> - goto cleanup;
> + goto endjob;
> }
>
> qemuMigrationVPAssociatePortProfiles(vm->def);
> @@ -2491,7 +2491,24 @@ qemuMigrationFinish(struct qemud_driver *driver,
> * Return a NULL dom pointer, and hope that this is a rare
> * situation and management tools are smart.
> */
> - vm = NULL;
> +
> + /*
> + * In v3 protocol, the source VM is still available to
> + * restart during confirm() step, so we kill it off
> + * now.
> + * In v2 protocol, the source is dead, so we leave
> + * target in paused state, in case admin can fix
> + * things up
> + */
> + if (v3proto) {
> + qemuProcessStop(driver, vm, 1, VIR_DOMAIN_SHUTOFF_FAILED);
> + qemuAuditDomainStop(vm, "failed");
> + if (newVM) {
> + if (qemuDomainObjEndJob(vm) > 0)
> + virDomainRemoveInactive(&driver->domains, vm);
> + vm = NULL;
> + }
> + }
> goto endjob;
> }
>
ACK
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|