summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCole Robinson <crobinso@redhat.com>2020-01-24 15:46:02 -0500
committerCole Robinson <crobinso@redhat.com>2020-01-24 17:04:29 -0500
commit419f8cd31b1db45d196cf393c3e0bec55d4168e2 (patch)
treea41514326131f5ce6bddaf7e63a106e79196fd28
parent3ad646fef19f31fb371eec87a173d268276e8f6c (diff)
downloadvirt-manager-419f8cd31b1db45d196cf393c3e0bec55d4168e2.tar.gz
pollhelpers: Streamline usage a bit
* Explicitly define the build 'cb', don't use lambda * Rename pollhelpers arguments, clarifying use of cb * Check support status in pollhelpers * Move 'dopoll' checking up a level in vmmConnection Signed-off-by: Cole Robinson <crobinso@redhat.com>
-rw-r--r--virtManager/connection.py62
-rw-r--r--virtManager/object/storagepool.py5
-rw-r--r--virtinst/pollhelpers.py49
3 files changed, 61 insertions, 55 deletions
diff --git a/virtManager/connection.py b/virtManager/connection.py
index 7e88f028..8c1a5939 100644
--- a/virtManager/connection.py
+++ b/virtManager/connection.py
@@ -1100,40 +1100,35 @@ class vmmConnection(vmmGObject):
if self._init_object_count <= 0:
self._init_object_event.set()
- def _update_nets(self, dopoll):
+ def _update_nets(self,):
keymap = dict((o.get_connkey(), o) for o in self.list_nets())
- if not dopoll or not self.support.conn_network():
- return [], [], list(keymap.values())
- return pollhelpers.fetch_nets(self._backend, keymap,
- (lambda obj, key: vmmNetwork(self, obj, key)))
+ def cb(obj, key):
+ return vmmNetwork(self, obj, key)
+ return pollhelpers.fetch_nets(self._backend, keymap, cb)
- def _update_pools(self, dopoll):
+ def _update_pools(self):
keymap = dict((o.get_connkey(), o) for o in self.list_pools())
- if not dopoll or not self.support.conn_storage():
- return [], [], list(keymap.values())
- return pollhelpers.fetch_pools(self._backend, keymap,
- (lambda obj, key: vmmStoragePool(self, obj, key)))
+ def cb(obj, key):
+ return vmmStoragePool(self, obj, key)
+ return pollhelpers.fetch_pools(self._backend, keymap, cb)
- def _update_interfaces(self, dopoll):
+ def _update_interfaces(self):
keymap = dict((o.get_connkey(), o) for o in self.list_interfaces())
- if not dopoll or not self.support.conn_interface():
- return [], [], list(keymap.values())
- return pollhelpers.fetch_interfaces(self._backend, keymap,
- (lambda obj, key: vmmInterface(self, obj, key)))
+ def cb(obj, key):
+ return vmmInterface(self, obj, key)
+ return pollhelpers.fetch_interfaces(self._backend, keymap, cb)
- def _update_nodedevs(self, dopoll):
+ def _update_nodedevs(self):
keymap = dict((o.get_connkey(), o) for o in self.list_nodedevs())
- if not dopoll or not self.support.conn_nodedev():
- return [], [], list(keymap.values())
- return pollhelpers.fetch_nodedevs(self._backend, keymap,
- (lambda obj, key: vmmNodeDevice(self, obj, key)))
+ def cb(obj, key):
+ return vmmNodeDevice(self, obj, key)
+ return pollhelpers.fetch_nodedevs(self._backend, keymap, cb)
- def _update_vms(self, dopoll):
+ def _update_vms(self):
keymap = dict((o.get_connkey(), o) for o in self.list_vms())
- if not dopoll:
- return [], [], list(keymap.values())
- return pollhelpers.fetch_vms(self._backend, keymap,
- (lambda obj, key: vmmDomain(self, obj, key)))
+ def cb(obj, key):
+ return vmmDomain(self, obj, key)
+ return pollhelpers.fetch_vms(self._backend, keymap, cb)
def _poll(self, initial_poll,
pollvm, pollnet, pollpool, polliface, pollnodedev):
@@ -1144,8 +1139,11 @@ class vmmConnection(vmmGObject):
gone_objects = []
preexisting_objects = []
- def _process_objects(polloutput):
- gone, new, master = polloutput
+ def _process_objects(pollcb, dopoll):
+ if not dopoll:
+ return []
+
+ gone, new, master = pollcb()
if initial_poll:
self._init_object_count += len(new)
@@ -1155,11 +1153,11 @@ class vmmConnection(vmmGObject):
new = [n for n in new if not self._objects.in_blacklist(n)]
return new
- new_vms = _process_objects(self._update_vms(pollvm))
- new_nets = _process_objects(self._update_nets(pollnet))
- new_pools = _process_objects(self._update_pools(pollpool))
- new_ifaces = _process_objects(self._update_interfaces(polliface))
- new_nodedevs = _process_objects(self._update_nodedevs(pollnodedev))
+ new_vms = _process_objects(self._update_vms, pollvm)
+ new_nets = _process_objects(self._update_nets, pollnet)
+ new_pools = _process_objects(self._update_pools, pollpool)
+ new_ifaces = _process_objects(self._update_interfaces, polliface)
+ new_nodedevs = _process_objects(self._update_nodedevs, pollnodedev)
# Kick off one thread per object type to handle the initial
# XML fetching. Going any more fine grained then this probably
diff --git a/virtManager/object/storagepool.py b/virtManager/object/storagepool.py
index 75be1822..c120fe2f 100644
--- a/virtManager/object/storagepool.py
+++ b/virtManager/object/storagepool.py
@@ -271,9 +271,10 @@ class vmmStoragePool(vmmLibvirtObject):
return
keymap = dict((o.get_connkey(), o) for o in self._volumes or [])
+ def cb(obj, key):
+ return vmmStorageVolume(self.conn, obj, key)
(ignore, ignore, allvols) = pollhelpers.fetch_volumes(
- self.conn.get_backend(), self.get_backend(), keymap,
- lambda obj, key: vmmStorageVolume(self.conn, obj, key))
+ self.conn.get_backend(), self.get_backend(), keymap, cb)
self._volumes = allvols
diff --git a/virtinst/pollhelpers.py b/virtinst/pollhelpers.py
index e880134e..a5c8391e 100644
--- a/virtinst/pollhelpers.py
+++ b/virtinst/pollhelpers.py
@@ -8,7 +8,7 @@
from .logger import log
-def _new_poll_helper(origmap, typename, listfunc, buildfunc):
+def _new_poll_helper(origmap, typename, list_cb, build_cb, support_cb):
"""
Helper for new style listAll* APIs
"""
@@ -17,7 +17,8 @@ def _new_poll_helper(origmap, typename, listfunc, buildfunc):
objs = []
try:
- objs = listfunc()
+ if support_cb():
+ objs = list_cb()
except Exception as e:
log.debug("Unable to list all %ss: %s", typename, e)
@@ -26,7 +27,7 @@ def _new_poll_helper(origmap, typename, listfunc, buildfunc):
if connkey not in origmap:
# Object is brand new this period
- current[connkey] = buildfunc(obj, connkey)
+ current[connkey] = build_cb(obj, connkey)
new[connkey] = current[connkey]
else:
# Previously known object
@@ -36,37 +37,43 @@ def _new_poll_helper(origmap, typename, listfunc, buildfunc):
return (list(origmap.values()), list(new.values()), list(current.values()))
-def fetch_nets(backend, origmap, build_func):
+def fetch_nets(backend, origmap, build_cb):
name = "network"
- return _new_poll_helper(origmap, name,
- backend.listAllNetworks, build_func)
+ list_cb = backend.listAllNetworks
+ support_cb = backend.support.conn_network
+ return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb)
-def fetch_pools(backend, origmap, build_func):
+def fetch_pools(backend, origmap, build_cb):
name = "pool"
- return _new_poll_helper(origmap, name,
- backend.listAllStoragePools, build_func)
+ list_cb = backend.listAllStoragePools
+ support_cb = backend.support.conn_storage
+ return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb)
-def fetch_volumes(backend, pool, origmap, build_func):
+def fetch_volumes(backend, pool, origmap, build_cb):
name = "volume"
- return _new_poll_helper(origmap, name,
- pool.listAllVolumes, build_func)
+ list_cb = pool.listAllVolumes
+ support_cb = backend.support.conn_storage
+ return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb)
-def fetch_interfaces(backend, origmap, build_func):
+def fetch_interfaces(backend, origmap, build_cb):
name = "interface"
- return _new_poll_helper(origmap, name,
- backend.listAllInterfaces, build_func)
+ list_cb = backend.listAllInterfaces
+ support_cb = backend.support.conn_interface
+ return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb)
-def fetch_nodedevs(backend, origmap, build_func):
+def fetch_nodedevs(backend, origmap, build_cb):
name = "nodedev"
- return _new_poll_helper(origmap, name,
- backend.listAllDevices, build_func)
+ list_cb = backend.listAllDevices
+ support_cb = backend.support.conn_nodedev
+ return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb)
-def fetch_vms(backend, origmap, build_func):
+def fetch_vms(backend, origmap, build_cb):
name = "domain"
- return _new_poll_helper(origmap, name,
- backend.listAllDomains, build_func)
+ list_cb = backend.listAllDomains
+ support_cb = backend.support.conn_domain
+ return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb)