On 08/14/2012 10:59 AM, Dmitry Guryanov wrote:
Hello,
vmware, openvz and parallels driver, which was written with first two ones
as an example, get list of domains in virConnectOpen and then use it for
lookups and even for listing sometimes. This is not correct, because you
can make several connections to the same driver and changes, made in one
connection will not be visible to other. And you can also create or
destroy domains using native tools.
So I think keeping list of domains in a stateless driver is a bad idea -
you should update this list each time when user requests some info. It's
better to retrieve needed data only when it requested, like in xenapi
driver.
Yes, that sounds like a correct assessment. Unless there is some sort
of API in the hypervisor that can be used to quickly tell if your local
cache of information is still up-to-date. For example, with the qemu
QMP monitor, every transaction incluses a monotonically transaction id;
if libvirt were worried about multiple simultaneous clients on the
monitor, we could still cache information and only invalidate the cache
when a transaction id skips more than the 1 expected increment for a
simple echo command. But I don't know if paralles, vmware, and/or
openvz have anything like this, so you are right that it is probably
better to reconstruct state on every call rather than relying on a cache
that could be silently out of sync with the real hypervisor state.
--
Eric Blake eblake(a)redhat.com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org