[libvirt] [RFC PATCH 0/8] Make loading domains with invalid XML possible
Michal Privoznik
mprivozn at redhat.com
Tue Oct 13 10:10:07 UTC 2015
On 22.09.2015 14:15, 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
> Id Name State
> ----------------------------------------------------
> - dummy shut off
>
> # 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.
>
> Why is this an RFC?
> - I can certainly easily imagine some people who might not like this
> - It doesn't work for all drivers (yet)
> - It does handle status XMLs, but only slightly. All the handling is
> done in a commit message that says something along the lines of
> "beware, we should still be careful, but not as much as before".
> - The error type used for the message is one that is already used for
> something else and we might want a new type of error for exactly
> this one error message, although it might be enough for some to
> have the possibility of checking this by querying the domain state
> and checking the reason.
> - Just so you know I came up with something new for which there's no
> BZ (or at least yet) =)
>
>
> Martin Kletzander (8):
> conf, virsh: Add new domain shutoff 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
> 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 | 180 +++++++++++++++++++++++++++++++++------
> src/conf/domain_conf.h | 5 ++
> src/libxl/libxl_driver.c | 3 +
> src/lxc/lxc_driver.c | 3 +
> src/qemu/qemu_driver.c | 64 +++++++++++---
> src/uml/uml_driver.c | 2 +
> tools/virsh-domain-monitor.c | 3 +-
> 9 files changed, 223 insertions(+), 41 deletions(-)
So now that we have an agreement here on the design, I went through the
patches and they basically look okay. Except for a few places I've
pointed out. ACK series then except for 7/8 where some explanation is
needed.
Michal
More information about the libvir-list
mailing list