Quoting "Daniel P. Berrange" <berrange(a)redhat.com>:
[snip]
> Here's a program that produces the bug I tried to address:
>
> import libvirt
> def get_domain(dom_name):
> conn = libvirt.openReadOnly(None)
> domain = conn.lookupByName(dom_name)
> return domain
> d = get_domain("mydomain")
> print d.info()
>
[snip]
This is a also a very bad pattern to use. Not only is opening a new
connection
a fairly heavyweight opertion - it has to connect to xenstore, xend, and fork
fork the proxy server. Now if each time to your get_domain the domain object
returned is associated with a different connection object. This
bypasseses the
caching of domain object instances which is done internal to libvirt,
degrading
performance still further.
I agree with you completely. However, there might be legitimate architectural
reasons for doing things the above way; it's possible that the programmer
didn't want that connection-creation code cluttering up the
program-proper ;-).
IMHO, a robust library shouldn't make assumptions about how its users will use
it. If the user wants to do something potentially dangerous, the library
should at least allow it, and definitely not bomb out.
Just my 2c. :-)
Pete