[libvirt] RFE: virConnectListAllDomains()
Daniel P. Berrange
berrange at redhat.com
Mon May 21 08:34:47 UTC 2012
On Sun, May 20, 2012 at 05:20:36PM +0200, Peter Krempa wrote:
> On 05/19/2012 01:52 AM, Eric Blake wrote:
> >Use of virConnectListDomains() and virConnectListDefinedDomains() is:
> >
> >1. inherently racy. A domain can change between active and inactive
> >between two back-to-back calls, and thus be entirely skipped or
> >enumerated twice when concatenating lists.
> >
> >2. painful to use. ListDomains gives ids, ListDefinedDomains gives
> >names, and the user must then call virDomainLookupByID() and
> >virDomainLookupByName() to convert into UUIDs.
> >
> >3. requires pre-allocation. The user must call virConnectNumOfDomains()
> >then over-allocate before calling virConnectListDomains(), in order to
> >guarantee that the list size didn't change between the two calls.
> >
> >This is a proposal for a new API that addresses all three points - by
> >returning virDomainPtr rather than id or strings, the UUID of each
> >domain can be grabbed in one shot. By consolidating things into a
> >single API call, there is no race in trying to piece together the
> >complete list. By having libvirt allocate the resulting array, rather
> >than making the caller pre-allocate, the user doesn't have to worry
> >about a race between getting a count and using that count. It also
> >provides the convenience of returning smaller lists based on various
> >filtering groups.
> >
> >Thoughts before I expand this API and add the actual implementation?
>
> I definitely agree with all of your points. I had very similar ideas
> how to implement such a functionality that actualy resulted in a
> very similar functionality that I've got almost ready and
> implemented (I was struggling with python bindings for this as I
> didn't notice that some of the code for looking up domains was
> automaticaly generated). Therefore I'd be glad if you would comment
> on my implementation and save work yourself :)
>
> >
> >diff --git i/include/libvirt/libvirt.h.in w/include/libvirt/libvirt.h.in
> >index a817db8..ea63d9f 100644
> >--- i/include/libvirt/libvirt.h.in
> >+++ w/include/libvirt/libvirt.h.in
> >@@ -1192,6 +1192,38 @@ int virConnectListDomains
> >(virConnectPtr conn,
> > */
> > int virConnectNumOfDomains (virConnectPtr conn);
> >
> >+/**
> >+ * virConnectListAllDomainsFlags:
> >+ *
> >+ * Flags used to tune which domains are listed by
> >virConnectListAllDomains().
> >+ * Note that these flags come in groups; if all bits from a group are 0,
> >+ * then that group is not used to filter results.
> >+ */
> >+typedef enum {
> >+ VIR_CONNECT_LIST_DOMAINS_ACTIVE = 1<< 0,
> >+ VIR_CONNECT_LIST_DOMAINS_INACTIVE = 1<< 1,
> >+
> >+ VIR_CONNECT_LIST_DOMAINS_PERSISTENT = 1<< 2,
> >+ VIR_CONNECT_LIST_DOMAINS_TRANSIENT = 1<< 3,
> >+
> >+ VIR_CONNECT_LIST_DOMAINS_RUNNING = 1<< 4,
> >+ VIR_CONNECT_LIST_DOMAINS_PAUSED = 1<< 5,
> >+ VIR_CONNECT_LIST_DOMAINS_SHUTOFF = 1<< 6,
> >+ VIR_CONNECT_LIST_DOMAINS_OTHER = 1<< 7,
> >+
> >+ VIR_CONNECT_LIST_DOMAINS_MANAGEDSAVE = 1<< 8,
> >+ VIR_CONNECT_LIST_DOMAINS_NO_MANAGEDSAVE = 1<< 9,
> >+
> >+ VIR_CONNECT_LIST_DOMAINS_AUTOSTART = 1<< 10,
> >+ VIR_CONNECT_LIST_DOMAINS_NO_AUTOSTART = 1<< 11,
> >+
> >+ VIR_CONNECT_LIST_DOMAINS_HAS_SNAPSHOT = 1<< 12,
> >+ VIR_CONNECT_LIST_DOMAINS_NO_SNAPSHOT = 1<< 13,
> >+} virConnectListAllDomainsFlags;
>
> This collection of filters is impressive, I'll add them as a
> followup or in v2 as v1 is almost ready.
>
> >+
> >+int virConnectListAllDomains(virConnectPtr conn,
> >+ virDomainPtr *doms,
> >+ unsigned int flags);
>
> My take of implementing this was basicaly identical (even the
> function name). The only thing i took differently was adding a
> parameter "ndomains" to enable limiting of size of the returned
> array. I don't think that this will be widely used, but it might be
> useful to get some of the guests if the complete list exceeds RPC
> limit. Do you think I should keep it?
No, I think we shouldn't have ndomains now we're increasing the RPC
size limit. We want this API design to be simple for apps to use
correctly.
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list