At 2011年07月11日 17:25, Daniel P. Berrange write:
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
Thanks, pushed.
Daniel