[libvirt] [PATCH v2 00/10] Make loading domains with invalid XML possible

John Ferlan jferlan at redhat.com
Thu Dec 10 20:20:20 UTC 2015



On 12/01/2015 12:35 PM, Martin Kletzander wrote:
> We always had to deal with new parsing errors in a weird way.  All of
> them needed to go into functions starting the domains.  That messes up
> the code, it's confusing to newcomers and so on.
> 
> I once had an idea that we can handle this stuff.  We know what
> failed, we have the XML that failed parsing and if the problem is not
> in the domain name nor UUID, we can create a domain object out of that
> as well.  This way we are able to do something we weren't with this
> series applied.  Example follows.
> 
> Assume "dummy" is a domain with invalid XML (I just modified the
> file).  Now, just for the purpose of this silly example, let's say we
> allowed domains with archtecture x86_*, but now we've realized that
> x86_64 is the only one we want to allow, but there already is a domain
> defined that has <type arch='x86_256' .../>.  With the current master,
> the domain would be lost, so we would need to modify the funstion
> starting the domain (e.g. qemuProcessStart for qemu domain).  However,
> with this series, it behaves like this:
> 
>   # virsh list --all --reason
>      Id    Name                           State      Reason
>     ---------------------------------------------------------------
>      -     dummy                          shut off   invalid XML
> 
>   # virsh domstate --reason dummy
>     shut off (invalid XML)
> 
>   # virsh start dummy
>   error: Failed to start domain dummy
>   error: XML error: domain 'dummy' was not loaded due to an XML error
>   (unsupported configuration: Unknown architecture x86_256), please
>   redefine it
> 
>   # VISUAL='sed -i s/x86_256/x86_64/' virsh edit dummy
>   Domain dummy XML configuration edited.
> 
>   # virsh domstate --reason dummy
>   shut off (unknown)
> 
>   # virsh start dummy
>   Domain dummy started
> 
> This is a logical next step for us to clean and separate parsing and
> starting, getting rid of some old code without sacrifying compatibility
> and maybe generating parser code in the future.
> 
> v2:
>  - rebased on top of current master (with virdomainobjlist.c)
>  - only disallow starting domains with invalid definitions (change
>    done in v1), but allow re-defining them
>  - add support for "virsh list --reason" to better excercise the
>    feature added in this patchset
> 
> v1:
>  - rebase
>  - don't allow starting domains with invalid state
>  - https://www.redhat.com/archives/libvir-list/2015-November/msg01127.html
> 
> RFC: https://www.redhat.com/archives/libvir-list/2015-September/msg00698.html
> 
> 
> Martin Kletzander (10):
>   conf, virsh: Add new domain shutoff reason
>   virsh: Refactor the table output of the list command
>   virsh: Add support for list -reason
>   qemu: Few whitespace cleanups
>   conf: Extract name-parsing into its own function
>   conf: Extract UUID parsing into its own function
>   conf: Optionally keep domains with invalid XML, but don't allow
>     starting them
>   qemu: Don't lookup invalid domains unless specified otherwise
>   qemu: Prepare basic APIs to handle invalid defs
>   qemu: Load domains with invalid XML on start
> 
>  include/libvirt/libvirt-domain.h |   2 +
>  src/bhyve/bhyve_driver.c         |   2 +
>  src/conf/domain_conf.c           | 121 +++++++++++++++++++++++++++++++--------
>  src/conf/domain_conf.h           |   7 +++
>  src/conf/virdomainobjlist.c      |  71 +++++++++++++++++++++--
>  src/conf/virdomainobjlist.h      |   1 +
>  src/libvirt_private.syms         |   1 +
>  src/libxl/libxl_driver.c         |   3 +
>  src/lxc/lxc_driver.c             |   3 +
>  src/qemu/qemu_driver.c           |  64 +++++++++++++++++----
>  src/uml/uml_driver.c             |   2 +
>  tests/virshtest.c                |  30 +++++++---
>  tools/virsh-domain-monitor.c     |  60 ++++++++++++-------
>  tools/virsh.pod                  |   5 +-
>  14 files changed, 303 insertions(+), 69 deletions(-)
> 
> --
> 2.6.3
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
> 

Beyond the few noted spots changes look good to me. Implicit ACK for
those not specifically noted.

John




More information about the libvir-list mailing list