[libvirt] RFC: add new API to known if domain has been updated

Osier Yang jyang at redhat.com
Mon Nov 15 02:26:22 UTC 2010


Hi, all

Suppose that one updated a domain, and want to restart the
domain with original configuration.

However, currently, unless shutdown the domain first, and then
restart or reload libvirtd, otherwise domain will still be started
with changed configuration. e.g.

# virsh list --all
 Id Name                 State
----------------------------------
  1 f14                  running

# virsh dumpxml f14 | grep -A 7 cdrom
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/var/lib/libvirt/images/cd1.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <alias name='ide0-1-0'/>
      <address type='drive' controller='0' bus='1' unit='0'/>
    </disk>

# virsh update-device f14 cd2.xml

# virsh dumpxml f14 | grep -A 7 cdrom
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/var/lib/libvirt/images/cd2.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <alias name='ide0-1-0'/>
      <address type='drive' controller='0' bus='1' unit='0'/>
    </disk>

# virsh destroy f14
# virsh start f14

# virsh dumpxml f14 | grep -A 7 cdrom
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/var/lib/libvirt/images/cd2.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <alias name='ide0-1-0'/>
      <address type='drive' controller='0' bus='1' unit='0'/>
    </disk>

it's caused by libvirtd doesn't known if a domain is updated or not,
it updated the domain configuration in memory, but client could
not known about it.

As a result, one wants to start the domain with original configuration,
he has to shutdown the domain first, and then restart libvirt.

It will be better if client could known if the domain is updated
or not, and could choose to start the domain with original
configuration or the updated one.

So, considered introducing a new member, the idea is adding
"unsigned int updated :1;" for "virDomainObj", adn the functions which
will update domain configuration should set it to "1" so that
libvirtd could known the domain is updated. e.g.

static int qemudDomainChangeEjectableMedia (....)
{
    .................

    /* if Media is changed or ejected successfully */
    if (!vm->updated)
        vm->updated = 1;

    ..................
}

And the client such as virsh could provide optional parameter for user
to choose if start the guest with original configuration or not. e.g.

# virsh start f14 --original

it tells "virsh" to start the domain with the persistent domain
configuration "/etc/libvirt/qemu/$domain.xml" but not the updated
one maitained by libvirtd.

PS: if this API is introduced finnally, we can also add "updated"
information in "dominfo".

What do you think about it? patches are coming following this thread.
awaiting feedback.. :-)

- Osier




More information about the libvir-list mailing list