[libvirt] [PATCH 0/5] Make virDomainObjListFindByName run in O(1)

Daniel P. Berrange berrange at redhat.com
Fri Apr 24 08:28:59 UTC 2015


On Fri, Apr 24, 2015 at 09:16:05AM +0200, Michal Privoznik wrote:
> On 24.04.2015 07:40, zhang bo wrote:
> > On 2015/4/24 1:14, Michal Privoznik wrote:
> > 
> >> As discussed here:
> >>
> >> https://www.redhat.com/archives/libvir-list/2015-April/msg01135.html
> >>
> >> Michal Privoznik (5):
> >>   virDomainObjListAddLocked: s/false/NULL/ for @oldDef
> >>   virDomainObjListNew: Use virObjectFreeHashData
> >>   Introduce virDomainObjEndAPI
> >>   virDomainObjListFindByName: Return referenced object
> >>   virDomainObjList: Introduce yet another hash table
> >>
> >>  src/bhyve/bhyve_driver.c         |  3 +-
> >>  src/conf/domain_conf.c           | 83 +++++++++++++++++++++++------------
> >>  src/conf/domain_conf.h           |  2 +
> >>  src/libvirt_private.syms         |  1 +
> >>  src/libxl/libxl_driver.c         | 10 ++---
> >>  src/lxc/lxc_driver.c             |  3 +-
> >>  src/openvz/openvz_driver.c       | 11 +++--
> >>  src/parallels/parallels_driver.c |  3 +-
> >>  src/qemu/qemu_domain.c           |  7 +--
> >>  src/qemu/qemu_driver.c           | 14 ++----
> >>  src/test/test_driver.c           | 93 +++++++++++++---------------------------
> >>  src/uml/uml_driver.c             | 15 +++----
> >>  12 files changed, 110 insertions(+), 135 deletions(-)
> >>
> > 
> > 
> > BTW, we just dealt with virDomainObjListFindByName() here, without caring about virDomainObjListFindByID().
> > virDomainObjListFindByID() is now called by umlDomainDestroyFlags() and umlDomainShutdownFlags(),
> > if we simultaneously shutdown multiple vms on hypervisor UML, then similar problem comes out: 
> > some guest maybe unable to shutdown immediately, until other guests get shutoff, and even 'virsh list' blocks.
> > 
> > so, shall we:
> > 1 don't take such problem as a problem
> > 2 use virDomainObjListFindByName() instead of virDomainObjListFindByID() there.
> 
> In fact I'd prefer FindByUUID() everywhere except for those few places
> where other lookup functions are necessary (e.g. virDomainLookupByID()).
> 
> > 3 add a third hash table for domid
> 
> No. even two hash tables duplicate information enough.
> 
> > 
> > If we use virDomainObjListFindByName() there, and forbids developers from using **ByID(), it seems unacceptable for
> > any developers.
> 
> Why?
> 
> > If we add a third hash table, it may become not easy to maintain the high-complexity codes. Is there a better solution other
> > than adding more hash tables?
> > 
> 
> The ultimate solution would be to have multi key hash table, so that any
> item from tuple (uuid, name, id) would suffice to find domain object.

I think we should just ignore the FindByID method - nothing inside
libvirt should use it - as you say we should always use UUID except
in the couple of places we use name. The public LookupByID method
is discouraged now we have the bulk-list APIs. So I don't think
there's any compelling reason to have a 3rd hash for ID lookup.

Regards,
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