summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Lehman <dlehman@redhat.com>2009-05-27 17:17:19 -0500
committerDavid Lehman <dlehman@redhat.com>2009-05-28 13:55:19 -0500
commit08701badb81774ef2569a4f0fb2695260ef42566 (patch)
treef532a15c54272128f4b03c8a144607433624b10b
parent790b247fcb299a245cde34e971cb0c91aa6d3b51 (diff)
downloadanaconda-08701badb81774ef2569a4f0fb2695260ef42566.tar.gz
anaconda-08701badb81774ef2569a4f0fb2695260ef42566.tar.xz
anaconda-08701badb81774ef2569a4f0fb2695260ef42566.zip
Create and use unique ids for Device instances. (#500808)
The use of a unique id frees us from having to worry about parted renaming partitions whenever we remove one. It will also provide a mechanism with which we can more reliably track protected partitions, currently problematic for the same reason.
-rw-r--r--iw/partition_dialog_gui.py2
-rw-r--r--storage/devices.py14
-rw-r--r--storage/devicetree.py37
3 files changed, 34 insertions, 19 deletions
diff --git a/iw/partition_dialog_gui.py b/iw/partition_dialog_gui.py
index 45748c2ee..8e0161e2b 100644
--- a/iw/partition_dialog_gui.py
+++ b/iw/partition_dialog_gui.py
@@ -271,7 +271,7 @@ class PartitionEditor:
elif not self.fsoptionsDict["formatcb"].get_active():
creates = devicetree.findActions(type="create",
object="format",
- path=usedev.path)
+ devid=usedev.id)
for action in creates:
devicetree.cancelAction(action)
diff --git a/storage/devices.py b/storage/devices.py
index 7d0e36ef0..b5e32afd3 100644
--- a/storage/devices.py
+++ b/storage/devices.py
@@ -176,6 +176,10 @@ class Device(object):
before destroying the device itself.
"""
+
+ # This is a counter for generating unique ids for Devices.
+ _id = 0
+
_type = "generic device"
_packages = []
@@ -201,6 +205,10 @@ class Device(object):
self.kids = 0
self.description = description
+ # Set this instance's id and increment the counter.
+ self.id = Device._id
+ Device._id += 1
+
for parent in self.parents:
parent.addChild()
@@ -227,10 +235,12 @@ class Device(object):
s = ("%(type)s instance (%(id)s) --\n"
" description = %(descr)s name = %(name)s status = %(status)s"
" parents = %(parents)s\n"
- " kids = %(kids)s\n" %
+ " kids = %(kids)s\n"
+ " id = %(dev_id)s\n" %
{"type": self.__class__.__name__, "id": "%#x" % id(self),
"name": self.name, "parents": self.parents, "kids": self.kids,
- "descr": self.description, "status": self.status})
+ "descr": self.description, "status": self.status,
+ "dev_id": self.id})
return s
def writeKS(self, f, preexisting=False, noformat=False, s=None):
diff --git a/storage/devicetree.py b/storage/devicetree.py
index 42ebdfca8..3dce7be83 100644
--- a/storage/devicetree.py
+++ b/storage/devicetree.py
@@ -226,11 +226,11 @@ class DeviceTree(object):
continue
log.debug("action '%s' (%s)" % (a, id(a)))
- destroys = self.findActions(path=a.device.path,
+ destroys = self.findActions(devid=a.device.id,
type="destroy",
object="device")
- creates = self.findActions(path=a.device.path,
+ creates = self.findActions(devid=a.device.id,
type="create",
object="device")
@@ -282,11 +282,11 @@ class DeviceTree(object):
continue
log.debug("action '%s' (%s)" % (a, id(a)))
- creates = self.findActions(path=a.device.path,
+ creates = self.findActions(devid=a.device.id,
type="create",
object="device")
- destroys = self.findActions(path=a.device.path,
+ destroys = self.findActions(devid=a.device.id,
type="destroy",
object="device")
@@ -318,7 +318,7 @@ class DeviceTree(object):
# remove all actions on this from after the first destroy up
# to the last create
- dev_actions = self.findActions(path=a.device.path)
+ dev_actions = self.findActions(devid=a.device.id)
for rem in dev_actions:
if rem == stop_action:
break
@@ -337,7 +337,7 @@ class DeviceTree(object):
continue
log.debug("action '%s' (%s)" % (a, id(a)))
- loops = self.findActions(path=a.device.path,
+ loops = self.findActions(devid=a.device.id,
type="resize",
object="device")
@@ -359,11 +359,11 @@ class DeviceTree(object):
continue
log.debug("action '%s' (%s)" % (a, id(a)))
- destroys = self.findActions(path=a.device.path,
+ destroys = self.findActions(devid=a.device.id,
type="destroy",
object="format")
- creates = self.findActions(path=a.device.path,
+ creates = self.findActions(devid=a.device.id,
type="create",
object="format")
@@ -396,7 +396,7 @@ class DeviceTree(object):
# now we remove all actions on this device's format between
# the start index (into self._actions) and stop_action.
- dev_actions = self.findActions(path=a.device.path,
+ dev_actions = self.findActions(devid=a.device.id,
object="format")
for rem in dev_actions:
end = self._actions.index(stop_action)
@@ -417,11 +417,11 @@ class DeviceTree(object):
continue
log.debug("action '%s' (%s)" % (a, id(a)))
- creates = self.findActions(path=a.device.path,
+ creates = self.findActions(devid=a.device.id,
type="create",
object="format")
- destroys = self.findActions(path=a.device.path,
+ destroys = self.findActions(devid=a.device.id,
type="destroy",
object="format")
@@ -453,7 +453,7 @@ class DeviceTree(object):
# remove all actions on this from after the first destroy up
# to the last create
- dev_actions = self.findActions(path=a.device.path,
+ dev_actions = self.findActions(devid=a.device.id,
object="format")
for rem in dev_actions:
if rem == stop_action:
@@ -473,7 +473,7 @@ class DeviceTree(object):
continue
log.debug("action '%s' (%s)" % (a, id(a)))
- loops = self.findActions(path=a.device.path,
+ loops = self.findActions(devid=a.device.id,
type="resize",
object="format")
@@ -495,7 +495,7 @@ class DeviceTree(object):
continue
log.debug("action '%s' (%s)" % (a, id(a)))
- loops = self.findActions(path=a.device.path,
+ loops = self.findActions(devid=a.device.id,
type="migrate",
object="format")
@@ -783,7 +783,8 @@ class DeviceTree(object):
self._actions.remove(action)
- def findActions(self, device=None, type=None, object=None, path=None):
+ def findActions(self, device=None, type=None, object=None, path=None,
+ devid=None):
""" Find all actions that match all specified parameters.
Keyword arguments:
@@ -794,7 +795,8 @@ class DeviceTree(object):
path -- device path to match (string, or None to match any)
"""
- if device is None and type is None and object is None and path is None:
+ if device is None and type is None and object is None and \
+ path is None and devid is None:
return self._actions[:]
# convert the string arguments to the types used in actions
@@ -814,6 +816,9 @@ class DeviceTree(object):
if path is not None and action.device.path != path:
continue
+
+ if devid is not None and action.device.id != devid:
+ continue
actions.append(action)