Skip to content

Commit 4792c7c

Browse files
committed
connection: Add a default impl of cache_new_pool
Inserts it into the cache, and adds its associated volumes too
1 parent a9d9c0d commit 4792c7c

File tree

3 files changed

+48
-22
lines changed

3 files changed

+48
-22
lines changed

virtManager/connection.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -309,13 +309,13 @@ def fetch_all_vols():
309309
return ret
310310
self._backend.cb_fetch_all_vols = fetch_all_vols
311311

312-
def cache_new_pool(obj, key):
313-
ignore = obj
312+
def cache_new_pool(obj):
314313
if not self.is_active():
315314
return
315+
name = obj.name()
316316
self.schedule_priority_tick(pollpool=True)
317317
def compare_cb():
318-
return bool(self.get_pool(key))
318+
return bool(self.get_pool(name))
319319
self._wait_for_condition(compare_cb)
320320
self._backend.cb_cache_new_pool = cache_new_pool
321321

virtinst/connection.py

Lines changed: 44 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -192,11 +192,14 @@ def fetch_all_guests(self):
192192
self._fetch_cache[key] = self._fetch_all_guests_raw()
193193
return self._fetch_cache[key][:]
194194

195+
def _build_pool_raw(self, poolobj):
196+
return StoragePool(weakref.ref(self),
197+
parsexml=poolobj.XMLDesc(0))
198+
195199
def _fetch_all_pools_raw(self):
196200
ignore, ignore, ret = pollhelpers.fetch_pools(
197201
self, {}, lambda obj, ignore: obj)
198-
return [StoragePool(weakref.ref(self), parsexml=obj.XMLDesc(0))
199-
for obj in ret]
202+
return [self._build_pool_raw(poolobj) for poolobj in ret]
200203

201204
def fetch_all_pools(self):
202205
"""
@@ -210,23 +213,27 @@ def fetch_all_pools(self):
210213
self._fetch_cache[key] = self._fetch_all_pools_raw()
211214
return self._fetch_cache[key][:]
212215

213-
def _fetch_all_vols_raw(self):
216+
def _fetch_vols_raw(self, poolxmlobj):
214217
ret = []
215-
for xmlobj in self.fetch_all_pools():
216-
pool = self._libvirtconn.storagePoolLookupByName(xmlobj.name)
217-
if pool.info()[0] != libvirt.VIR_STORAGE_POOL_RUNNING:
218-
continue
219-
220-
ignore, ignore, vols = pollhelpers.fetch_volumes(
221-
self, pool, {}, lambda obj, ignore: obj)
222-
223-
for vol in vols:
224-
try:
225-
xml = vol.XMLDesc(0)
226-
ret.append(StorageVolume(weakref.ref(self), parsexml=xml))
227-
except Exception as e:
228-
logging.debug("Fetching volume XML failed: %s", e)
218+
pool = self._libvirtconn.storagePoolLookupByName(poolxmlobj.name)
219+
if pool.info()[0] != libvirt.VIR_STORAGE_POOL_RUNNING:
220+
return ret
221+
222+
ignore, ignore, vols = pollhelpers.fetch_volumes(
223+
self, pool, {}, lambda obj, ignore: obj)
224+
225+
for vol in vols:
226+
try:
227+
xml = vol.XMLDesc(0)
228+
ret.append(StorageVolume(weakref.ref(self), parsexml=xml))
229+
except Exception as e:
230+
logging.debug("Fetching volume XML failed: %s", e)
231+
return ret
229232

233+
def _fetch_all_vols_raw(self):
234+
ret = []
235+
for poolxmlobj in self.fetch_all_pools():
236+
ret.extend(self._fetch_vols_raw(poolxmlobj))
230237
return ret
231238

232239
def fetch_all_vols(self):
@@ -241,6 +248,26 @@ def fetch_all_vols(self):
241248
self._fetch_cache[key] = self._fetch_all_vols_raw()
242249
return self._fetch_cache[key][:]
243250

251+
def cache_new_pool(self, poolobj):
252+
"""
253+
Insert the passed poolobj into our cache
254+
"""
255+
if self.cb_cache_new_pool:
256+
# pylint: disable=not-callable
257+
return self.cb_cache_new_pool(poolobj)
258+
259+
# Make sure cache is primed
260+
if self._FETCH_KEY_POOLS not in self._fetch_cache:
261+
# Nothing cached yet, so next poll will pull in latest bits,
262+
# so there's nothing to do
263+
return
264+
265+
poollist = self._fetch_cache[self._FETCH_KEY_POOLS]
266+
poolxmlobj = self._build_pool_raw(poolobj)
267+
poollist.append(poolxmlobj)
268+
vollist = self._fetch_cache[self._FETCH_KEY_VOLS]
269+
vollist.extend(self._fetch_vols_raw(poolxmlobj))
270+
244271
def _fetch_all_nodedevs_raw(self):
245272
ignore, ignore, ret = pollhelpers.fetch_nodedevs(
246273
self, {}, lambda obj, ignore: obj)

virtinst/storage.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -565,8 +565,7 @@ def install(self, meter=None, create=False, build=False, autostart=False):
565565
"%s" % str(e))
566566
raise RuntimeError(errmsg)
567567

568-
if self.conn.cb_cache_new_pool:
569-
self.conn.cb_cache_new_pool(pool, self.name)
568+
self.conn.cache_new_pool(pool)
570569

571570
return pool
572571

0 commit comments

Comments
 (0)