[PATCH 2/2] Avoid unneccesarily tripping raid-level member count checks.
David Lehman
dlehman at redhat.com
Tue Oct 7 21:33:12 UTC 2014
---
blivet/devicefactory.py | 31 +++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)
diff --git a/blivet/devicefactory.py b/blivet/devicefactory.py
index f8b2122..8b0d163 100644
--- a/blivet/devicefactory.py
+++ b/blivet/devicefactory.py
@@ -990,21 +990,13 @@ class PartitionSetFactory(PartitionFactory):
log.debug("remove_disks: %s", [d.name for d in remove_disks])
##
- ## Remove members from dropped disks.
+ ## Make a list of members we'll later remove from dropped disks.
##
+ removed = []
for member in members[:]:
if any([d in remove_disks for d in member.disks]):
- if container:
- container.parents.remove(member)
-
- if isinstance(member, LUKSDevice):
- self.storage.destroyDevice(member)
- members.remove(member)
- member = member.slave
- else:
- members.remove(member)
-
- self.storage.destroyDevice(member)
+ removed.append(member) # remove them after adding new ones
+ members.remove(member)
##
## Handle toggling of member encryption.
@@ -1079,6 +1071,21 @@ class PartitionSetFactory(PartitionFactory):
container.parents.append(member)
##
+ ## Remove members from dropped disks.
+ ##
+ # Do this last to prevent tripping raid level constraints on the number
+ # of members.
+ for member in removed:
+ if container:
+ container.parents.remove(member)
+
+ if isinstance(member, LUKSDevice):
+ self.storage.destroyDevice(member)
+ member = member.slave
+
+ self.storage.destroyDevice(member)
+
+ ##
## Determine target container size.
##
total_space = self.parent_factory._get_total_space()
--
1.9.3
More information about the anaconda-patches
mailing list