From e45a2228dcbaa7e400509f57eece4c2b1d3b380e Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Tue, 1 Sep 2020 12:35:26 -0400 Subject: [PATCH] objects: Erase the notion of connkey Make it explicit that all uses of this is actually the object name. We already leaked this abstraction in several places so better to make it explicit. This also communicates to users that this is a field that is not immutable so it shouldn't be used as a unique key Signed-off-by: Cole Robinson --- tests/test_conn.py | 2 +- virtManager/addhardware.py | 2 +- virtManager/clone.py | 2 +- virtManager/connection.py | 51 ++++++++++++++------------- virtManager/createvm.py | 2 +- virtManager/createvol.py | 5 +-- virtManager/device/netlist.py | 15 +++----- virtManager/hostnets.py | 16 ++++----- virtManager/hoststorage.py | 53 ++++++++++++----------------- virtManager/lib/inspection.py | 14 ++++---- virtManager/lib/statsmanager.py | 6 ++-- virtManager/object/domain.py | 7 ++-- virtManager/object/libvirtobject.py | 25 +++----------- virtManager/object/nodedev.py | 2 -- virtManager/object/storagepool.py | 12 +++---- virtManager/storagebrowse.py | 4 +-- virtinst/pollhelpers.py | 32 ++++++++--------- 17 files changed, 105 insertions(+), 145 deletions(-) diff --git a/tests/test_conn.py b/tests/test_conn.py index 4be426522..867c2c2e3 100644 --- a/tests/test_conn.py +++ b/tests/test_conn.py @@ -60,7 +60,7 @@ class TestConn(unittest.TestCase): # Add coverage for conn fetch_* handling, and pollhelpers conn = cli.getConnection("test:///default") objmap = {} - def build_cb(obj, connkey): + def build_cb(obj, name): return obj gone, new, master = pollhelpers.fetch_nets(conn, {}, build_cb) diff --git a/virtManager/addhardware.py b/virtManager/addhardware.py index aa82aa15a..0ab1f4e5b 100644 --- a/virtManager/addhardware.py +++ b/virtManager/addhardware.py @@ -1259,7 +1259,7 @@ class vmmAddHardware(vmmGObjectUI): if poolname: try: - pool = self.conn.get_pool(poolname) + pool = self.conn.get_pool_by_name(poolname) self.idle_add(pool.refresh) except Exception: # pragma: no cover log.debug("Error looking up pool=%s for refresh after " diff --git a/virtManager/clone.py b/virtManager/clone.py index 76a0bcb09..71ea67a9c 100644 --- a/virtManager/clone.py +++ b/virtManager/clone.py @@ -873,7 +873,7 @@ class vmmCloneVM(vmmGObjectUI): for poolname in refresh_pools: try: - pool = self.conn.get_pool(poolname) + pool = self.conn.get_pool_by_name(poolname) self.idle_add(pool.refresh) except Exception: log.debug("Error looking up pool=%s for refresh after " diff --git a/virtManager/connection.py b/virtManager/connection.py index bbb174e81..0f0db4fe7 100644 --- a/virtManager/connection.py +++ b/virtManager/connection.py @@ -44,7 +44,7 @@ class _ObjectList(vmmGObject): self._objects = [] def _blacklist_key(self, obj): - return str(obj.__class__) + obj.get_connkey() + return str(obj.__class__) + obj.get_name() def add_blacklist(self, obj): """ @@ -108,7 +108,7 @@ class _ObjectList(vmmGObject): # lock the whole time to prevent a 'time of check' issue for checkobj in self._objects: if (checkobj.__class__ == obj.__class__ and - checkobj.get_connkey() == obj.get_connkey()): + checkobj.get_name() == obj.get_name()): return False if obj in self._objects: return False @@ -123,13 +123,13 @@ class _ObjectList(vmmGObject): with self._lock: return [o for o in self._objects if o.__class__ is classobj] - def lookup_object(self, classobj, connkey): + def lookup_object(self, classobj, name): """ - Lookup an object with the passed classobj + connkey + Lookup an object with the passed classobj + name """ # Doesn't require locking, since get_objects_for_class covers us for obj in self.get_objects_for_class(classobj): - if obj.get_connkey() == connkey: + if obj.get_name() == name: return obj return None @@ -284,7 +284,7 @@ class vmmConnection(vmmGObject): name = obj.name() self.schedule_priority_tick(pollpool=True) def compare_cb(): - return bool(self.get_pool(name)) + return bool(self.get_pool_by_name(name)) self._wait_for_condition(compare_cb) self._backend.cb_cache_new_pool = cache_new_pool @@ -502,23 +502,23 @@ class vmmConnection(vmmGObject): # Libvirt object lookup methods # ################################# - def get_vm(self, connkey): - return self._objects.lookup_object(vmmDomain, connkey) + def get_vm_by_name(self, name): + return self._objects.lookup_object(vmmDomain, name) def list_vms(self): return self._objects.get_objects_for_class(vmmDomain) - def get_net(self, connkey): - return self._objects.lookup_object(vmmNetwork, connkey) + def get_net_by_name(self, name): + return self._objects.lookup_object(vmmNetwork, name) def list_nets(self): return self._objects.get_objects_for_class(vmmNetwork) - def get_pool(self, connkey): - return self._objects.lookup_object(vmmStoragePool, connkey) + def get_pool_by_name(self, name): + return self._objects.lookup_object(vmmStoragePool, name) def list_pools(self): return self._objects.get_objects_for_class(vmmStoragePool) - def get_nodedev(self, connkey): - return self._objects.lookup_object(vmmNodeDevice, connkey) + def get_nodedev_by_name(self, name): + return self._objects.lookup_object(vmmNodeDevice, name) def list_nodedevs(self): return self._objects.get_objects_for_class(vmmNodeDevice) @@ -557,8 +557,7 @@ class vmmConnection(vmmGObject): def define_pool(self, xml): return self._backend.storagePoolDefineXML(xml, 0) - def rename_object(self, obj, origxml, newxml, oldconnkey): - ignore = oldconnkey + def rename_object(self, obj, origxml, newxml): if obj.is_domain(): define_cb = self.define_domain elif obj.is_pool(): @@ -620,7 +619,7 @@ class vmmConnection(vmmGObject): name = domain.name() log.debug("domain xmlmisc event: domain=%s event=%s args=%s", name, eventstr, args) - obj = self.get_vm(name) + obj = self.get_vm_by_name(name) if not obj: return @@ -634,7 +633,7 @@ class vmmConnection(vmmGObject): log.debug("domain lifecycle event: domain=%s %s", name, LibvirtEnumMap.domain_lifecycle_str(state, reason)) - obj = self.get_vm(name) + obj = self.get_vm_by_name(name) if obj: self.idle_add(obj.recache_from_event_loop) @@ -649,7 +648,7 @@ class vmmConnection(vmmGObject): log.debug("domain agent lifecycle event: domain=%s %s", name, LibvirtEnumMap.domain_agent_lifecycle_str(state, reason)) - obj = self.get_vm(name) + obj = self.get_vm_by_name(name) if obj: self.idle_add(obj.recache_from_event_loop) @@ -663,7 +662,7 @@ class vmmConnection(vmmGObject): name = network.name() log.debug("network lifecycle event: network=%s %s", name, LibvirtEnumMap.network_lifecycle_str(state, reason)) - obj = self.get_net(name) + obj = self.get_net_by_name(name) if obj: self.idle_add(obj.recache_from_event_loop) @@ -679,7 +678,7 @@ class vmmConnection(vmmGObject): log.debug("storage pool lifecycle event: pool=%s %s", name, LibvirtEnumMap.storage_lifecycle_str(state, reason)) - obj = self.get_pool(name) + obj = self.get_pool_by_name(name) if obj: self.idle_add(obj.recache_from_event_loop) @@ -693,7 +692,7 @@ class vmmConnection(vmmGObject): name = pool.name() log.debug("storage pool refresh event: pool=%s", name) - obj = self.get_pool(name) + obj = self.get_pool_by_name(name) if not obj: return @@ -718,7 +717,7 @@ class vmmConnection(vmmGObject): name = dev.name() log.debug("node device update event: nodedev=%s", name) - obj = self.get_nodedev(name) + obj = self.get_nodedev_by_name(name) if obj: self.idle_add(obj.recache_from_event_loop) @@ -1106,9 +1105,9 @@ class vmmConnection(vmmGObject): pollcb = pollhelpers.fetch_vms - keymap = dict((o.get_connkey(), o) for o in objs) - def cb(obj, key): - return cls(self, obj, key) + keymap = dict((o.get_name(), o) for o in objs) + def cb(obj, name): + return cls(self, obj, name) if dopoll: gone, new, master = pollcb(self._backend, keymap, cb) else: diff --git a/virtManager/createvm.py b/virtManager/createvm.py index 60856e943..84a8cd6f7 100644 --- a/virtManager/createvm.py +++ b/virtManager/createvm.py @@ -2036,7 +2036,7 @@ class vmmCreateVM(vmmGObjectUI): # Kick off pool updates for poolname in refresh_pools: try: - pool = self.conn.get_pool(poolname) + pool = self.conn.get_pool_by_name(poolname) self.idle_add(pool.refresh) except Exception: # pragma: no cover log.debug("Error looking up pool=%s for refresh after " diff --git a/virtManager/createvol.py b/virtManager/createvol.py index 6fafbc91b..91dd7743b 100644 --- a/virtManager/createvol.py +++ b/virtManager/createvol.py @@ -17,7 +17,7 @@ from .xmleditor import vmmXMLEditor class vmmCreateVolume(vmmGObjectUI): __gsignals__ = { - "vol-created": (vmmGObjectUI.RUN_FIRST, None, [str, str]), + "vol-created": (vmmGObjectUI.RUN_FIRST, None, [object, object]), } def __init__(self, conn, parent_pool): @@ -284,7 +284,8 @@ class vmmCreateVolume(vmmGObjectUI): ################## def _pool_refreshed_cb(self, pool, volname): - self.emit("vol-created", pool.get_connkey(), volname) + vol = pool.get_volume_by_name(volname) + self.emit("vol-created", pool, vol) def _finish_cb(self, error, details, vol): self.reset_finish_cursor() diff --git a/virtManager/device/netlist.py b/virtManager/device/netlist.py index 732a6cf3d..551cd308e 100644 --- a/virtManager/device/netlist.py +++ b/virtManager/device/netlist.py @@ -17,18 +17,16 @@ NET_ROW_SOURCE = 1 NET_ROW_LABEL = 2 NET_ROW_SENSITIVE = 3 NET_ROW_MANUAL = 4 -NET_ROW_CONNKEY = 5 def _build_row(nettype, source_name, - label, is_sensitive, manual=False, connkey=None): + label, is_sensitive, manual=False): row = [] row.insert(NET_ROW_TYPE, nettype) row.insert(NET_ROW_SOURCE, source_name) row.insert(NET_ROW_LABEL, label) row.insert(NET_ROW_SENSITIVE, is_sensitive) row.insert(NET_ROW_MANUAL, manual) - row.insert(NET_ROW_CONNKEY, connkey) return row @@ -94,7 +92,6 @@ class vmmNetworkList(vmmGObjectUI): fields.insert(NET_ROW_LABEL, str) fields.insert(NET_ROW_SENSITIVE, bool) fields.insert(NET_ROW_MANUAL, bool) - fields.insert(NET_ROW_CONNKEY, str) model = Gtk.ListStore(*fields) combo = self.widget("net-source") @@ -121,9 +118,8 @@ class vmmNetworkList(vmmGObjectUI): if net.get_xmlobj().virtualport_type == "openvswitch": label += " (OpenVSwitch)" - rows.append(_build_row( - nettype, net.get_name(), label, True, - connkey=net.get_connkey())) + row = _build_row(nettype, net.get_name(), label, True) + rows.append(row) return rows @@ -190,10 +186,7 @@ class vmmNetworkList(vmmGObjectUI): netobj = None if net.type == virtinst.DeviceInterface.TYPE_VIRTUAL: - for n in self.conn.list_nets(): - if n.get_name() == devname: - netobj = n - break + netobj = self.conn.get_net_by_name(devname) if not netobj or netobj.is_active(): return diff --git a/virtManager/hostnets.py b/virtManager/hostnets.py index a0412eed9..2213d391c 100644 --- a/virtManager/hostnets.py +++ b/virtManager/hostnets.py @@ -96,8 +96,8 @@ class vmmHostNets(vmmGObjectUI): self._xmleditor.connect("xml-reset", self._xmleditor_xml_reset_cb) - # [ unique, label, icon name, icon size, is_active ] - netListModel = Gtk.ListStore(str, str, str, int, bool) + # [ netobj, label, icon name, icon size, is_active ] + netListModel = Gtk.ListStore(object, str, str, int, bool) self.widget("net-list").set_model(netListModel) sel = self.widget("net-list").get_selection() @@ -148,8 +148,7 @@ class vmmHostNets(vmmGObjectUI): self._set_error_page(_("Connection not active.")) def _current_network(self): - connkey = uiutil.get_list_selection(self.widget("net-list")) - return connkey and self.conn.get_net(connkey) + return uiutil.get_list_selection(self.widget("net-list")) def _set_error_page(self, msg): self.widget("network-pages").set_current_page(1) @@ -187,14 +186,13 @@ class vmmHostNets(vmmGObjectUI): for net in self.conn.list_nets(): net.disconnect_by_obj(self) net.connect("state-changed", self._net_state_changed_cb) - model.append([net.get_connkey(), net.get_name(), "network-idle", + model.append([net, net.get_name(), "network-idle", Gtk.IconSize.LARGE_TOOLBAR, bool(net.is_active())]) finally: net_list.set_model(model) - uiutil.set_list_selection(net_list, - curnet and curnet.get_connkey() or None) + uiutil.set_list_selection(net_list, curnet) def _populate_net_ipv4_state(self, net): (netstr, (dhcpstart, dhcpend)) = net.get_ipv4_network() @@ -373,12 +371,12 @@ class vmmHostNets(vmmGObjectUI): def _net_state_changed_cb(self, net): # Update net state inline in the tree model for row in self.widget("net-list").get_model(): - if row[0] == net.get_connkey(): + if row[0] == net: row[4] = net.is_active() # If refreshed network is the current net, refresh the UI curnet = self._current_network() - if curnet and curnet.get_connkey() == net.get_connkey(): + if curnet == net: self._refresh_current_network() def _net_selected_cb(self, selection): diff --git a/virtManager/hoststorage.py b/virtManager/hoststorage.py index c66f96bd8..a3bfc52b2 100644 --- a/virtManager/hoststorage.py +++ b/virtManager/hoststorage.py @@ -26,7 +26,7 @@ EDIT_POOL_XML, ) = list(range(3)) VOL_NUM_COLUMNS = 7 -(VOL_COLUMN_KEY, +(VOL_COLUMN_HANDLE, VOL_COLUMN_NAME, VOL_COLUMN_CAPACITY, VOL_COLUMN_SIZESTR, @@ -35,7 +35,7 @@ VOL_NUM_COLUMNS = 7 VOL_COLUMN_SENSITIVE) = range(VOL_NUM_COLUMNS) POOL_NUM_COLUMNS = 4 -(POOL_COLUMN_CONNKEY, +(POOL_COLUMN_HANDLE, POOL_COLUMN_LABEL, POOL_COLUMN_ISACTIVE, POOL_COLUMN_PERCENT) = range(POOL_NUM_COLUMNS) @@ -184,8 +184,8 @@ class vmmHostStorage(vmmGObjectUI): self._volmenu.add(volCopyPath) # Volume list - # [key, name, sizestr, capacity, format, in use by string, sensitive] - volListModel = Gtk.ListStore(str, str, str, str, str, str, bool) + # [obj, name, sizestr, capacity, format, in use by string, sensitive] + volListModel = Gtk.ListStore(object, str, str, str, str, str, bool) self.widget("vol-list").set_model(volListModel) volCol = Gtk.TreeViewColumn(_("Volumes")) @@ -225,9 +225,9 @@ class vmmHostStorage(vmmGObjectUI): Gtk.SortType.ASCENDING) # Init pool list - # [connkey, label, pool.is_active(), percent string] + # [pool object, label, pool.is_active(), percent string] pool_list = self.widget("pool-list") - poolListModel = Gtk.ListStore(str, str, bool, str) + poolListModel = Gtk.ListStore(object, str, bool, str) pool_list.set_model(poolListModel) poolCol = Gtk.TreeViewColumn(_("Storage Pools")) @@ -281,33 +281,27 @@ class vmmHostStorage(vmmGObjectUI): self._set_error_page(_("Connection not active.")) def _current_pool(self): - connkey = uiutil.get_list_selection(self.widget("pool-list")) - return connkey and self.conn.get_pool(connkey) + return uiutil.get_list_selection(self.widget("pool-list")) def _current_vol(self): pool = self._current_pool() if not pool: return None # pragma: no cover + return uiutil.get_list_selection(self.widget("vol-list")) - connkey = uiutil.get_list_selection(self.widget("vol-list")) - return connkey and pool.get_volume(connkey) - - def _update_pool_row(self, connkey): + def _update_pool_row(self, pool): for row in self.widget("pool-list").get_model(): - if row[POOL_COLUMN_CONNKEY] != connkey: + if row[POOL_COLUMN_HANDLE] != pool: continue # Update active sensitivity and percent available for passed key - pool = self.conn.get_pool(connkey) row[POOL_COLUMN_ISACTIVE] = pool.is_active() row[POOL_COLUMN_PERCENT] = _get_pool_size_percent(pool) break curpool = self._current_pool() - if not curpool or curpool.get_connkey() != connkey: - return - - self._refresh_current_pool() + if curpool == pool: + self._refresh_current_pool() def _populate_pool_state(self, pool): auto = pool.get_autostart() @@ -394,7 +388,7 @@ class vmmHostStorage(vmmGObjectUI): label = "%s\n%s" % (name, typ) row = [None] * POOL_NUM_COLUMNS - row[POOL_COLUMN_CONNKEY] = pool.get_connkey() + row[POOL_COLUMN_HANDLE] = pool row[POOL_COLUMN_LABEL] = label row[POOL_COLUMN_ISACTIVE] = pool.is_active() row[POOL_COLUMN_PERCENT] = _get_pool_size_percent(pool) @@ -403,8 +397,7 @@ class vmmHostStorage(vmmGObjectUI): finally: pool_list.set_model(model) - uiutil.set_list_selection(pool_list, - curpool and curpool.get_connkey() or None) + uiutil.set_list_selection(pool_list, curpool) def _populate_vols(self): list_widget = self.widget("vol-list") @@ -418,8 +411,6 @@ class vmmHostStorage(vmmGObjectUI): vscroll_percent = vadj.get_value() // max(vadj.get_upper(), 1) for vol in vols: - key = vol.get_connkey() - try: path = vol.get_target_path() name = vol.get_pretty_name(pool.get_type()) @@ -428,7 +419,7 @@ class vmmHostStorage(vmmGObjectUI): fmt = vol.get_format() or "" except Exception: # pragma: no cover log.debug("Error getting volume info for '%s', " - "hiding it", key, exc_info=True) + "hiding it", name, exc_info=True) continue namestr = None @@ -448,7 +439,7 @@ class vmmHostStorage(vmmGObjectUI): sensitive = self._vol_sensitive_cb(fmt) row = [None] * VOL_NUM_COLUMNS - row[VOL_COLUMN_KEY] = key + row[VOL_COLUMN_HANDLE] = vol row[VOL_COLUMN_NAME] = name row[VOL_COLUMN_SIZESTR] = sizestr row[VOL_COLUMN_CAPACITY] = cap @@ -635,16 +626,14 @@ class vmmHostStorage(vmmGObjectUI): def _vol_list_row_activated_cb(self, src, treeiter, viewcol): self.emit("volume-chosen", self._current_vol()) - def _vol_created_cb(self, src, pool_connkey, volname): + def _vol_created_cb(self, src, pool, vol): # The vol list will have already been updated, since this # signal arrives only after pool-refreshed. So all we do here is # select the vol we just created. - pool = self._current_pool() - if not pool or pool.get_connkey() != pool_connkey: + curpool = self._current_pool() + if curpool != pool: return # pragma: no cover - - # Select the new volume - uiutil.set_list_selection(self.widget("vol-list"), volname) + uiutil.set_list_selection(self.widget("vol-list"), vol) def _pool_autostart_changed_cb(self, src): self._enable_pool_apply(EDIT_POOL_AUTOSTART) @@ -666,7 +655,7 @@ class vmmHostStorage(vmmGObjectUI): self.emit("cancel-clicked") def _pool_changed_cb(self, pool): - self._update_pool_row(pool.get_connkey()) + self._update_pool_row(pool) def _conn_state_changed_cb(self, conn): self._refresh_conn_state() diff --git a/virtManager/lib/inspection.py b/virtManager/lib/inspection.py index e9d6f13ff..30732e48d 100644 --- a/virtManager/lib/inspection.py +++ b/virtManager/lib/inspection.py @@ -247,7 +247,7 @@ class vmmInspection(vmmGObject): self._uris.append(uri) conn.connect("vm-added", self._vm_added_cb) for vm in conn.list_vms(): - self._vm_added_cb(conn, vm.get_connkey()) + self._vm_added_cb(conn, vm.get_name()) def _conn_removed_cb(self, connmanager, uri): self._uris.remove(uri) @@ -259,7 +259,7 @@ class vmmInspection(vmmGObject): log.debug("ignore libvirt/guestfs temporary VM %s", name) return - self._q.put((conn.get_uri(), vm.get_connkey())) + self._q.put((conn.get_uri(), vm.get_name())) def _start(self): self._thread = threading.Thread( @@ -282,17 +282,17 @@ class vmmInspection(vmmGObject): if data is None: log.debug("libguestfs queue vm=None, exiting thread") return - uri, connkey = data - self._process_vm(uri, connkey) + uri, vmname = data + self._process_vm(uri, vmname) self._q.task_done() - def _process_vm(self, uri, connkey): + def _process_vm(self, uri, vmname): connmanager = vmmConnectionManager.get_instance() conn = connmanager.conns.get(uri) if not conn: return - vm = conn.get_vm(connkey) + vm = conn.get_vm_by_name(vmname) if not vm: return @@ -344,4 +344,4 @@ class vmmInspection(vmmGObject): # as the data itself will be replaced once the new # results are available. self._cached_data.pop(vm.get_uuid(), None) - self._q.put((vm.conn.get_uri(), vm.get_connkey())) + self._q.put((vm.conn.get_uri(), vm.get_name())) diff --git a/virtManager/lib/statsmanager.py b/virtManager/lib/statsmanager.py index e0f083766..3c6ea3387 100644 --- a/virtManager/lib/statsmanager.py +++ b/virtManager/lib/statsmanager.py @@ -450,6 +450,6 @@ class vmmStatsManager(vmmGObject): self._latest_all_stats = self._get_all_stats(conn) def get_vm_statslist(self, vm): - if vm.get_connkey() not in self._vm_stats: - self._vm_stats[vm.get_connkey()] = _VMStatsList() - return self._vm_stats[vm.get_connkey()] + if vm.get_name() not in self._vm_stats: + self._vm_stats[vm.get_name()] = _VMStatsList() + return self._vm_stats[vm.get_name()] diff --git a/virtManager/object/domain.py b/virtManager/object/domain.py index feccfc6ad..1a45271f8 100644 --- a/virtManager/object/domain.py +++ b/virtManager/object/domain.py @@ -75,7 +75,7 @@ class _IPFetcher: self._cache = {"qemuga": {}, "arp": {}} if iface.type == "network": - net = vm.conn.get_net(iface.source) + net = vm.conn.get_net_by_name(iface.source) if net: net.get_dhcp_leases(refresh=True) @@ -99,7 +99,7 @@ class _IPFetcher: arp = self._cache["arp"] leases = [] if iface.type == "network": - net = vm.conn.get_net(iface.source) + net = vm.conn.get_net_by_name(iface.source) if net: leases = net.get_dhcp_leases() @@ -184,9 +184,6 @@ class vmmDomainSnapshot(vmmLibvirtObject): # Required class methods # ########################## - def _backend_get_name(self): - return self._backend.getName() - def _conn_tick_poll_param(self): return None # pragma: no cover def class_name(self): diff --git a/virtManager/object/libvirtobject.py b/virtManager/object/libvirtobject.py index ef561c8a0..0dfe68b39 100644 --- a/virtManager/object/libvirtobject.py +++ b/virtManager/object/libvirtobject.py @@ -18,12 +18,12 @@ class vmmLibvirtObject(vmmGObject): _STATUS_ACTIVE = 1 _STATUS_INACTIVE = 2 - def __init__(self, conn, backend, key, parseclass): + def __init__(self, conn, backend, name, parseclass): vmmGObject.__init__(self) self._conn = conn self._backend = backend - self._key = key self._parseclass = parseclass + self._name = name self.__initialized = False self.__status = None @@ -36,11 +36,6 @@ class vmmLibvirtObject(vmmGObject): self._inactive_xml_flags = 0 self._active_xml_flags = 0 - # Cache object name. We may need to do this even - # before init_libvirt_state since it might be needed ahead of time. - self._name = None - self.get_name() - @staticmethod def log_redefine_xml_diff(obj, origxml, newxml): if origxml == newxml: @@ -94,8 +89,6 @@ class vmmLibvirtObject(vmmGObject): def get_backend(self): return self._backend - def get_connkey(self): - return self._key def is_domain(self): return self.class_name() == "domain" @@ -111,7 +104,6 @@ class vmmLibvirtObject(vmmGObject): self._backend = newbackend def define_name(self, newname): - oldconnkey = self.get_connkey() oldname = self.get_xmlobj().name self.ensure_latest_xml() @@ -126,10 +118,10 @@ class vmmLibvirtObject(vmmGObject): newxml = xmlobj.get_xml() try: - self._key = newname - self.conn.rename_object(self, origxml, newxml, oldconnkey) + self._name = newname + self.conn.rename_object(self, origxml, newxml) except Exception: # pragma: no cover - self._key = oldname + self._name = oldname raise finally: self.__force_refresh_xml() @@ -163,13 +155,8 @@ class vmmLibvirtObject(vmmGObject): ignore = force def get_name(self): - if self._name is None: - self._name = self._backend_get_name() return self._name - def _backend_get_name(self): - return self._backend.name() - def tick(self, stats_update=True): ignore = stats_update self._refresh_status() @@ -361,8 +348,6 @@ class vmmLibvirtObject(vmmGObject): Mark cached XML as invalid. Subclasses may extend this to invalidate any specific caches of their own """ - self._name = None - # While for events we do want to clear cached XML values like # _name, the XML is never invalid. self._is_xml_valid = self._using_events() diff --git a/virtManager/object/nodedev.py b/virtManager/object/nodedev.py index 8f49df06d..797569b2e 100644 --- a/virtManager/object/nodedev.py +++ b/virtManager/object/nodedev.py @@ -55,8 +55,6 @@ class vmmNodeDevice(vmmLibvirtObject): return self._backend.XMLDesc(flags) def _get_backend_status(self): return self._STATUS_ACTIVE - def _backend_get_name(self): - return self.get_connkey() def _using_events(self): return self.conn.using_node_device_events diff --git a/virtManager/object/storagepool.py b/virtManager/object/storagepool.py index 961464b96..05f7c9a7e 100644 --- a/virtManager/object/storagepool.py +++ b/virtManager/object/storagepool.py @@ -240,15 +240,15 @@ class vmmStoragePool(vmmLibvirtObject): # Volume handling # ################### + def get_volume_by_name(self, name): + for vol in self.get_volumes(): + if vol.get_name() == name: + return vol + def get_volumes(self): self._update_volumes(force=False) return self._volumes[:] - def get_volume(self, key): - for vol in self.get_volumes(): - if vol.get_connkey() == key: - return vol - def _update_volumes(self, force): if not self.is_active(): self._volumes = [] @@ -256,7 +256,7 @@ class vmmStoragePool(vmmLibvirtObject): if not force and self._volumes is not None: return - keymap = dict((o.get_connkey(), o) for o in self._volumes or []) + keymap = dict((o.get_name(), o) for o in self._volumes or []) def cb(obj, key): return vmmStorageVolume(self.conn, obj, key) (dummy1, dummy2, allvols) = pollhelpers.fetch_volumes( diff --git a/virtManager/storagebrowse.py b/virtManager/storagebrowse.py index c06fbf158..b5fa9a2ee 100644 --- a/virtManager/storagebrowse.py +++ b/virtManager/storagebrowse.py @@ -37,8 +37,8 @@ class vmmStorageBrowser(vmmGObjectUI): if not self._first_run: self._first_run = True pool = self.conn.get_default_pool() - uiutil.set_list_selection(self.storagelist.widget("pool-list"), - pool and pool.get_connkey() or None) + uiutil.set_list_selection( + self.storagelist.widget("pool-list"), pool) self.topwin.set_transient_for(parent) self.topwin.present() diff --git a/virtinst/pollhelpers.py b/virtinst/pollhelpers.py index 55ad9656d..ef6959148 100644 --- a/virtinst/pollhelpers.py +++ b/virtinst/pollhelpers.py @@ -23,50 +23,50 @@ def _new_poll_helper(origmap, typename, list_cb, build_cb, support_cb): log.debug("Unable to list all %ss: %s", typename, e) for obj in objs: - connkey = obj.name() + name = obj.name() - if connkey not in origmap: + if name not in origmap: # Object is brand new this period - current[connkey] = build_cb(obj, connkey) - new[connkey] = current[connkey] + current[name] = build_cb(obj, name) + new[name] = current[name] else: # Previously known object - current[connkey] = origmap[connkey] - del(origmap[connkey]) + current[name] = origmap[name] + del(origmap[name]) return (list(origmap.values()), list(new.values()), list(current.values())) def fetch_nets(backend, origmap, build_cb): - name = "network" + typename = "network" list_cb = backend.listAllNetworks support_cb = backend.support.conn_network - return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb) + return _new_poll_helper(origmap, typename, list_cb, build_cb, support_cb) def fetch_pools(backend, origmap, build_cb): - name = "pool" + typename = "pool" list_cb = backend.listAllStoragePools support_cb = backend.support.conn_storage - return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb) + return _new_poll_helper(origmap, typename, list_cb, build_cb, support_cb) def fetch_volumes(backend, pool, origmap, build_cb): - name = "volume" + typename = "volume" list_cb = pool.listAllVolumes support_cb = backend.support.conn_storage - return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb) + return _new_poll_helper(origmap, typename, list_cb, build_cb, support_cb) def fetch_nodedevs(backend, origmap, build_cb): - name = "nodedev" + typename = "nodedev" list_cb = backend.listAllDevices support_cb = backend.support.conn_nodedev - return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb) + return _new_poll_helper(origmap, typename, list_cb, build_cb, support_cb) def fetch_vms(backend, origmap, build_cb): - name = "domain" + typename = "domain" list_cb = backend.listAllDomains support_cb = backend.support.conn_domain - return _new_poll_helper(origmap, name, list_cb, build_cb, support_cb) + return _new_poll_helper(origmap, typename, list_cb, build_cb, support_cb)