From 44e60065c946ef0b8bca16fb58c87cd542ac9bf3 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Thu, 11 Sep 2014 18:01:41 -0400 Subject: [PATCH 3/4] domain: Cache has_managed_save value Otherwise we call it every time a domain row is selected, which makes things choppy on remote connections. (cherry picked from commit b398a46e9bfcd192d9286d6edc81deade77bb1a8) --- virtManager/details.py | 2 +- virtManager/domain.py | 32 +++++++++++++++++++++----------- virtManager/engine.py | 4 ++-- virtManager/manager.py | 2 +- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/virtManager/details.py b/virtManager/details.py index 9fae87a..e03048d 100644 --- a/virtManager/details.py +++ b/virtManager/details.py @@ -1370,7 +1370,7 @@ class vmmDetails(vmmGObjectUI): ro = vm.is_read_only() if vm.managedsave_supported: - self.change_run_text(vm.hasSavedImage()) + self.change_run_text(vm.has_managed_save()) self.widget("control-run").set_sensitive(run) self.widget("control-shutdown").set_sensitive(stop) diff --git a/virtManager/domain.py b/virtManager/domain.py index 4098e2d..9c3699f 100644 --- a/virtManager/domain.py +++ b/virtManager/domain.py @@ -298,6 +298,7 @@ class vmmDomain(vmmLibvirtObject): self._is_management_domain = None self._id = None self._uuid = None + self._has_managed_save = None self._snapshot_list = None self.lastStatus = libvirt.VIR_DOMAIN_SHUTOFF @@ -361,6 +362,9 @@ class vmmDomain(vmmLibvirtObject): self.force_update_status(from_event=True, log=False) + # Cache managed save value + self.has_managed_save() + # Hook up listeners that need to be cleaned up self.add_gconf_handle( self.config.on_stats_enable_cpu_poll_changed( @@ -1377,20 +1381,25 @@ class vmmDomain(vmmLibvirtObject): self._backend.resume() self.idle_add(self.force_update_status) - def hasSavedImage(self): + def has_managed_save(self): if not self.managedsave_supported: return False - try: - return self._backend.hasManagedSaveImage(0) - except libvirt.libvirtError, e: - if not util.exception_is_libvirt_error(e, "VIR_ERR_NO_DOMAIN"): - raise - return False - def removeSavedImage(self): - if not self.hasSavedImage(): + if self._has_managed_save is None: + try: + self._has_managed_save = self._backend.hasManagedSaveImage(0) + except libvirt.libvirtError, e: + if not util.exception_is_libvirt_error(e, "VIR_ERR_NO_DOMAIN"): + raise + return False + + return self._has_managed_save + + def remove_saved_image(self): + if not self.has_managed_save(): return self._backend.managedSaveRemove(0) + self._has_managed_save = None def save(self, filename=None, meter=None): self._install_abort = True @@ -1660,7 +1669,7 @@ class vmmDomain(vmmLibvirtObject): return self.status() in [libvirt.VIR_DOMAIN_PAUSED] def run_status(self): - return self.pretty_run_status(self.status(), self.hasSavedImage()) + return self.pretty_run_status(self.status(), self.has_managed_save()) def run_status_reason(self): return self.pretty_status_reason(self.status(), self.status_reason()) @@ -1707,6 +1716,7 @@ class vmmDomain(vmmLibvirtObject): self.lastStatus = status if self.domain_state_supported: self._lastStatusReason = self._backend.state()[1] + self._has_managed_save = None # Send 'config-changed' before a status-update, so users # are operating with fresh XML @@ -1958,7 +1968,7 @@ class vmmDomainVirtinst(vmmDomain): return self._backend.uuid def get_id(self): return -1 - def hasSavedImage(self): + def has_managed_save(self): return False def _XMLDesc(self, flags): diff --git a/virtManager/engine.py b/virtManager/engine.py index 38d7e2d..588aae0 100644 --- a/virtManager/engine.py +++ b/virtManager/engine.py @@ -1046,7 +1046,7 @@ class vmmEngine(vmmGObject): logging.debug("Starting vm '%s'", vm.get_name()) - if vm.hasSavedImage(): + if vm.has_managed_save(): def errorcb(error, details): # This is run from the main thread res = src.err.show_err( @@ -1064,7 +1064,7 @@ class vmmEngine(vmmGObject): return try: - vm.removeSavedImage() + vm.remove_saved_image() self._do_run_domain(src, uri, connkey) except Exception, e: src.err.show_err(_("Error removing domain state: %s") diff --git a/virtManager/manager.py b/virtManager/manager.py index 03d3ecc..9c0007a 100644 --- a/virtManager/manager.py +++ b/virtManager/manager.py @@ -919,7 +919,7 @@ class vmmManager(vmmGObjectUI): show_shutdown = bool(vm and vm.is_stoppable()) if vm and vm.managedsave_supported: - self.change_run_text(vm.hasSavedImage()) + self.change_run_text(vm.has_managed_save()) self.widget("vm-open").set_sensitive(show_open) self.widget("vm-run").set_sensitive(show_run) -- 1.9.3