[libvirt] [PATCH 2/2] qemu: Use same create/define overwrite logic for migration prepare.

Cole Robinson crobinso at redhat.com
Fri Nov 6 15:14:13 UTC 2009


On 11/06/2009 08:26 AM, Daniel Veillard wrote:
> On Wed, Nov 04, 2009 at 03:06:59PM -0500, Cole Robinson wrote:
>>
>> Signed-off-by: Cole Robinson <crobinso at redhat.com>
>> ---
>>  src/qemu/qemu_driver.c |   30 ++++--------------------------
>>  1 files changed, 4 insertions(+), 26 deletions(-)
>>
>> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>> index 20621d1..53f7398 100644
>> --- a/src/qemu/qemu_driver.c
>> +++ b/src/qemu/qemu_driver.c
>> @@ -5978,19 +5978,8 @@ qemudDomainMigratePrepareTunnel(virConnectPtr dconn,
>>      /* Target domain name, maybe renamed. */
>>      dname = dname ? dname : def->name;
>>  
>> -    /* Ensure the name and UUID don't already exist in an active VM */
>> -    vm = virDomainFindByUUID(&driver->domains, def->uuid);
>> -
>> -    if (!vm) vm = virDomainFindByName(&driver->domains, dname);
>> -    if (vm) {
>> -        if (virDomainObjIsActive(vm)) {
>> -            qemudReportError(dconn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
>> -                             _("domain with the same name or UUID already exists as '%s'"),
>> -                             vm->def->name);
>> -            goto cleanup;
>> -        }
>> -        virDomainObjUnlock(vm);
>> -    }
>> +    if (virDomainObjIsDuplicate(&driver->domains, def, 1) < 0)
>> +        goto cleanup;
>>  
>>      if (!(vm = virDomainAssignDef(dconn,
>>                                    driver->caps,
>> @@ -6202,19 +6191,8 @@ qemudDomainMigratePrepare2 (virConnectPtr dconn,
>>      /* Target domain name, maybe renamed. */
>>      dname = dname ? dname : def->name;
>>  
>> -    /* Ensure the name and UUID don't already exist in an active VM */
>> -    vm = virDomainFindByUUID(&driver->domains, def->uuid);
>> -
>> -    if (!vm) vm = virDomainFindByName(&driver->domains, dname);
>> -    if (vm) {
>> -        if (virDomainObjIsActive(vm)) {
>> -            qemudReportError (dconn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
>> -                              _("domain with the same name or UUID already exists as '%s'"),
>> -                              vm->def->name);
>> -            goto cleanup;
>> -        }
>> -        virDomainObjUnlock(vm);
>> -    }
>> +    if (virDomainObjIsDuplicate(&driver->domains, def, 1) < 0)
>> +        goto cleanup;
>>  
>>      if (!(vm = virDomainAssignDef(dconn,
>>                                    driver->caps,
> 
>   Hum, there is a slight change of semantic in that case, if VM migrated
> from A to B, then gets renamed on B, if you try to migrate it back to A
> that will fail because the uuid match/name mismatch failure will be
> raised while this won't be the case with current code, right ?
>   Maybe it's the right thing to do, but that's a change I think
> 
> Daniel
> 

Yeah, that's why I had this as a separate patch, since it's a behavior
change with no existing precedent. I think the change makes sense here,
we are essentially invoking CreateXML on the new host, and this ensures
migrate uses the same semantics as CreateXML.

I've pushed these two patches now.

- Cole




More information about the libvir-list mailing list