[libvirt] [PATCH] kill vm if saving config failed in v3 protocol

Wen Congyang wencongyang at gmail.com
Mon Jul 11 13:10:49 UTC 2011


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




More information about the libvir-list mailing list