--- virtManager/connection.py | 35 +++++++++++++++++++++++++++++++++++ virtManager/storagelist.py | 5 +---- virtManager/storagepool.py | 5 ++++- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/virtManager/connection.py b/virtManager/connection.py index 6cb9cc0..98b4ce1 100644 --- a/virtManager/connection.py +++ b/virtManager/connection.py @@ -213,6 +213,8 @@ class vmmConnection(vmmGObject): self._domain_cb_ids = [] self.using_network_events = False self._network_cb_ids = [] + self.using_storage_pool_events = False + self._storage_pool_cb_ids = [] self._xml_flags = {} @@ -774,6 +776,20 @@ class vmmConnection(vmmGObject): else: self.schedule_priority_tick(pollnet=True, force=True) + def _storage_pool_lifecycle_event(self, conn, pool, event, reason, userdata): + ignore = conn + ignore = userdata + + name = pool.name() + logging.debug("storage pool lifecycle event: storage=%s event=%s " + "reason=%s", name, event, reason) + obj = self.get_pool(name) + + if obj: + self.idle_add(obj.refresh_from_event_loop) + else: + self.schedule_priority_tick(pollpool=True, force=True) + def _add_conn_events(self): if not self.check_support(support.SUPPORT_CONN_WORKING_XEN_EVENTS): return @@ -829,6 +845,20 @@ class vmmConnection(vmmGObject): self.using_network_events = False logging.debug("Error registering network events: %s", e) + try: + if FORCE_DISABLE_EVENTS: + raise RuntimeError("FORCE_DISABLE_EVENTS = True") + + eventid = getattr(libvirt, "VIR_STORAGE_POOL_EVENT_ID_LIFECYCLE", 0) + self._storage_pool_cb_ids.append( + self.get_backend().storagePoolEventRegisterAny( + None, eventid, self._storage_pool_lifecycle_event, None)) + self.using_storage_pool_events = True + logging.debug("Using storage pool events") + except Exception, e: + self.using_storage_pool_events = False + logging.debug("Error registering storage pool events: %s", e) + ###################################### # Connection closing/opening methods # @@ -849,12 +879,15 @@ class vmmConnection(vmmGObject): self._backend.domainEventDeregisterAny(eid) for eid in self._network_cb_ids: self._backend.networkEventDeregisterAny(eid) + for eid in self._storage_pool_cb_ids: + self._backend.storagePoolEventDeregisterAny(eid) except: logging.debug("Failed to deregister events in conn cleanup", exc_info=True) finally: self._domain_cb_ids = [] self._network_cb_ids = [] + self._storage_pool_cb_ids = [] self._backend.close() self._stats = [] @@ -1177,6 +1210,8 @@ class vmmConnection(vmmGObject): pollvm = False if self.using_network_events and not force: pollnet = False + if self.using_storage_pool_events and not force: + pollpool = False self._hostinfo = self._backend.getInfo() diff --git a/virtManager/storagelist.py b/virtManager/storagelist.py index 8a34e7f..c16cf5c 100644 --- a/virtManager/storagelist.py +++ b/virtManager/storagelist.py @@ -654,11 +654,8 @@ class vmmStorageList(vmmGObjectUI): if pool is None: return - def cb(): - pool.refresh() - logging.debug("Refresh pool '%s'", pool.get_name()) - vmmAsyncJob.simple_async_noshow(cb, [], self, + vmmAsyncJob.simple_async_noshow(pool.refresh, [], self, _("Error refreshing pool '%s'") % pool.get_name()) def _pool_apply(self): diff --git a/virtManager/storagepool.py b/virtManager/storagepool.py index b099fbe..ac7af1d 100644 --- a/virtManager/storagepool.py +++ b/virtManager/storagepool.py @@ -40,7 +40,7 @@ class vmmStorageVolume(vmmLibvirtObject): ########################## def _conn_tick_poll_param(self): - return None + return "pollpool" def class_name(self): return "volume" @@ -59,6 +59,7 @@ class vmmStorageVolume(vmmLibvirtObject): # Deliberately empty ignore = stats_update def _init_libvirt_state(self): + self.tick() self.ensure_latest_xml() @@ -134,6 +135,8 @@ class vmmStoragePool(vmmLibvirtObject): return self._backend.XMLDesc(flags) def _define(self, xml): return self.conn.define_pool(xml) + def _using_events(self): + return self.conn.using_storage_pool_events def _check_supports_isactive(self): return self.conn.check_support( self.conn.SUPPORT_POOL_ISACTIVE, self._backend) -- 2.5.5 _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list