[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