mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
connection: Add a default impl of cache_new_pool
Inserts it into the cache, and adds its associated volumes too
This commit is contained in:
parent
a9d9c0d035
commit
4792c7cb8e
@ -309,13 +309,13 @@ class vmmConnection(vmmGObject):
|
|||||||
return ret
|
return ret
|
||||||
self._backend.cb_fetch_all_vols = fetch_all_vols
|
self._backend.cb_fetch_all_vols = fetch_all_vols
|
||||||
|
|
||||||
def cache_new_pool(obj, key):
|
def cache_new_pool(obj):
|
||||||
ignore = obj
|
|
||||||
if not self.is_active():
|
if not self.is_active():
|
||||||
return
|
return
|
||||||
|
name = obj.name()
|
||||||
self.schedule_priority_tick(pollpool=True)
|
self.schedule_priority_tick(pollpool=True)
|
||||||
def compare_cb():
|
def compare_cb():
|
||||||
return bool(self.get_pool(key))
|
return bool(self.get_pool(name))
|
||||||
self._wait_for_condition(compare_cb)
|
self._wait_for_condition(compare_cb)
|
||||||
self._backend.cb_cache_new_pool = cache_new_pool
|
self._backend.cb_cache_new_pool = cache_new_pool
|
||||||
|
|
||||||
|
@ -192,11 +192,14 @@ class VirtualConnection(object):
|
|||||||
self._fetch_cache[key] = self._fetch_all_guests_raw()
|
self._fetch_cache[key] = self._fetch_all_guests_raw()
|
||||||
return self._fetch_cache[key][:]
|
return self._fetch_cache[key][:]
|
||||||
|
|
||||||
|
def _build_pool_raw(self, poolobj):
|
||||||
|
return StoragePool(weakref.ref(self),
|
||||||
|
parsexml=poolobj.XMLDesc(0))
|
||||||
|
|
||||||
def _fetch_all_pools_raw(self):
|
def _fetch_all_pools_raw(self):
|
||||||
ignore, ignore, ret = pollhelpers.fetch_pools(
|
ignore, ignore, ret = pollhelpers.fetch_pools(
|
||||||
self, {}, lambda obj, ignore: obj)
|
self, {}, lambda obj, ignore: obj)
|
||||||
return [StoragePool(weakref.ref(self), parsexml=obj.XMLDesc(0))
|
return [self._build_pool_raw(poolobj) for poolobj in ret]
|
||||||
for obj in ret]
|
|
||||||
|
|
||||||
def fetch_all_pools(self):
|
def fetch_all_pools(self):
|
||||||
"""
|
"""
|
||||||
@ -210,23 +213,27 @@ class VirtualConnection(object):
|
|||||||
self._fetch_cache[key] = self._fetch_all_pools_raw()
|
self._fetch_cache[key] = self._fetch_all_pools_raw()
|
||||||
return self._fetch_cache[key][:]
|
return self._fetch_cache[key][:]
|
||||||
|
|
||||||
|
def _fetch_vols_raw(self, poolxmlobj):
|
||||||
|
ret = []
|
||||||
|
pool = self._libvirtconn.storagePoolLookupByName(poolxmlobj.name)
|
||||||
|
if pool.info()[0] != libvirt.VIR_STORAGE_POOL_RUNNING:
|
||||||
|
return ret
|
||||||
|
|
||||||
|
ignore, ignore, vols = pollhelpers.fetch_volumes(
|
||||||
|
self, pool, {}, lambda obj, ignore: obj)
|
||||||
|
|
||||||
|
for vol in vols:
|
||||||
|
try:
|
||||||
|
xml = vol.XMLDesc(0)
|
||||||
|
ret.append(StorageVolume(weakref.ref(self), parsexml=xml))
|
||||||
|
except Exception as e:
|
||||||
|
logging.debug("Fetching volume XML failed: %s", e)
|
||||||
|
return ret
|
||||||
|
|
||||||
def _fetch_all_vols_raw(self):
|
def _fetch_all_vols_raw(self):
|
||||||
ret = []
|
ret = []
|
||||||
for xmlobj in self.fetch_all_pools():
|
for poolxmlobj in self.fetch_all_pools():
|
||||||
pool = self._libvirtconn.storagePoolLookupByName(xmlobj.name)
|
ret.extend(self._fetch_vols_raw(poolxmlobj))
|
||||||
if pool.info()[0] != libvirt.VIR_STORAGE_POOL_RUNNING:
|
|
||||||
continue
|
|
||||||
|
|
||||||
ignore, ignore, vols = pollhelpers.fetch_volumes(
|
|
||||||
self, pool, {}, lambda obj, ignore: obj)
|
|
||||||
|
|
||||||
for vol in vols:
|
|
||||||
try:
|
|
||||||
xml = vol.XMLDesc(0)
|
|
||||||
ret.append(StorageVolume(weakref.ref(self), parsexml=xml))
|
|
||||||
except Exception as e:
|
|
||||||
logging.debug("Fetching volume XML failed: %s", e)
|
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def fetch_all_vols(self):
|
def fetch_all_vols(self):
|
||||||
@ -241,6 +248,26 @@ class VirtualConnection(object):
|
|||||||
self._fetch_cache[key] = self._fetch_all_vols_raw()
|
self._fetch_cache[key] = self._fetch_all_vols_raw()
|
||||||
return self._fetch_cache[key][:]
|
return self._fetch_cache[key][:]
|
||||||
|
|
||||||
|
def cache_new_pool(self, poolobj):
|
||||||
|
"""
|
||||||
|
Insert the passed poolobj into our cache
|
||||||
|
"""
|
||||||
|
if self.cb_cache_new_pool:
|
||||||
|
# pylint: disable=not-callable
|
||||||
|
return self.cb_cache_new_pool(poolobj)
|
||||||
|
|
||||||
|
# Make sure cache is primed
|
||||||
|
if self._FETCH_KEY_POOLS not in self._fetch_cache:
|
||||||
|
# Nothing cached yet, so next poll will pull in latest bits,
|
||||||
|
# so there's nothing to do
|
||||||
|
return
|
||||||
|
|
||||||
|
poollist = self._fetch_cache[self._FETCH_KEY_POOLS]
|
||||||
|
poolxmlobj = self._build_pool_raw(poolobj)
|
||||||
|
poollist.append(poolxmlobj)
|
||||||
|
vollist = self._fetch_cache[self._FETCH_KEY_VOLS]
|
||||||
|
vollist.extend(self._fetch_vols_raw(poolxmlobj))
|
||||||
|
|
||||||
def _fetch_all_nodedevs_raw(self):
|
def _fetch_all_nodedevs_raw(self):
|
||||||
ignore, ignore, ret = pollhelpers.fetch_nodedevs(
|
ignore, ignore, ret = pollhelpers.fetch_nodedevs(
|
||||||
self, {}, lambda obj, ignore: obj)
|
self, {}, lambda obj, ignore: obj)
|
||||||
|
@ -565,8 +565,7 @@ class StoragePool(_StorageObject):
|
|||||||
"%s" % str(e))
|
"%s" % str(e))
|
||||||
raise RuntimeError(errmsg)
|
raise RuntimeError(errmsg)
|
||||||
|
|
||||||
if self.conn.cb_cache_new_pool:
|
self.conn.cache_new_pool(pool)
|
||||||
self.conn.cb_cache_new_pool(pool, self.name)
|
|
||||||
|
|
||||||
return pool
|
return pool
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user