[libvirt] [PATCH 0/9] Grab modify job for changing domain XML

Nikolay Shirokovskiy nshirokovskiy at virtuozzo.com
Tue Jun 4 10:53:21 UTC 2019



On 30.05.2019 12:33, Michal Privoznik wrote:
> This is an alternative proposal to:
> 
> https://www.redhat.com/archives/libvir-list/2019-May/msg00830.html
> 
> The problem I'm trying to fix is described here:
> 
> https://www.redhat.com/archives/libvir-list/2019-May/msg00810.html
> 
> Michal Prívozník (9):
>   virDomainObjListAddLocked: Drop useless @cleanup label
>   virDomainObjListAddObjLocked: Don't expect vm->def to be set
>   virDomainObjListAddLocked: Set vm->def only in success path
>   virDomainObjIsActive: Allow vm->def to be NULL
>   virDomainObjListAdd: Leave def assigning as an exercise for caller
>   qemu: Allow vm->def == NULL in job control APIs
>   qemu: Grab modify job for changing domain XML
>   lxc: Grab modify job for changing domain XML
>   libxl: Grab modify job for changing domain XML
> 
>  src/bhyve/bhyve_driver.c    | 10 +++++---
>  src/conf/domain_conf.h      |  2 +-
>  src/conf/virdomainobjlist.c | 48 ++++++++++++++----------------------
>  src/conf/virdomainobjlist.h |  3 +--
>  src/libxl/libxl_domain.c    |  3 ++-
>  src/libxl/libxl_driver.c    | 48 ++++++++++++++++++++++++------------
>  src/libxl/libxl_migration.c | 14 +++++------
>  src/lxc/lxc_domain.c        |  3 ++-
>  src/lxc/lxc_driver.c        | 23 +++++++++++------
>  src/openvz/openvz_conf.c    | 12 ++++-----
>  src/openvz/openvz_driver.c  | 17 +++++++------
>  src/qemu/qemu_domain.c      | 30 ++++++++++++++---------
>  src/qemu/qemu_driver.c      | 49 ++++++++++++++++++++++++++-----------
>  src/qemu/qemu_migration.c   | 13 +++++++---
>  src/test/test_driver.c      | 21 +++++++++-------
>  src/vmware/vmware_conf.c    |  4 +--
>  src/vmware/vmware_driver.c  |  9 +++----
>  src/vz/vz_sdk.c             |  4 ++-
>  18 files changed, 183 insertions(+), 130 deletions(-)
> 

In patches 8 and 9 there are same issues as in qemu part patches.

In order to overcome NULL names in acquire job and remove inactive domain functions
I suggest using next approach:

    if (!(vm = virDomainObjListAdd(driver->domains, def,                                                               
                                   driver->xmlopt, 0)))                                                                
        goto cleanup;                                                                                                  
                                                                                                                       
    if (!vm->def) {                                                                                                    
        virDomainObjAssignDef(vm, def, false, NULL);                                                                
        def = NULL;                                                                                                    
    }                                                                                                                  
                                                                                                                       
    if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0) {                                                      
        qemuDomainRemoveInactive(driver, vm);                                                                          
        goto cleanup;                                                                                                  
    }                                                                                                                  
                                                                                                                       
    if (def) {                                                                                                         
        virDomainObjAssignDef(vm, def, false, &oldDef);                                                                
        def = NULL;                                                                                                    
    }      

Then we don't need other patches that support case when vm->def == NULL.

First assign can be moved to virDomainObjListAddLocked to the branch
where new object is created although virDomainObjListAdd will have
a bit weird semantics in this case.


Nikolay




More information about the libvir-list mailing list