[blivet:master 14/16] Refine BTRFSVolumeDevice._removeParent() method.

mulhern amulhern at redhat.com
Tue May 6 16:42:39 UTC 2014


Now that LinearRAID("single") is a RAID level it is possible to eliminate
special cases. Should be semantics preserving as LinearRAID.min_members is
0.

Signed-off-by: mulhern <amulhern at redhat.com>
---
 blivet/devices.py | 26 ++++++++++----------------
 1 file changed, 10 insertions(+), 16 deletions(-)

diff --git a/blivet/devices.py b/blivet/devices.py
index 8a2d838..89548b2 100644
--- a/blivet/devices.py
+++ b/blivet/devices.py
@@ -4618,22 +4618,16 @@ class BTRFSVolumeDevice(BTRFSDevice, ContainerDevice):
         return size
 
     def _removeParent(self, member):
-        # btrfs won't let you degrade it
-        limits = []
-        levels = btrfs.RAID_levels
-        if self.dataLevel and self.dataLevel != "single":
-            limits.append(levels.raidLevel(self.dataLevel).min_members)
-
-        if self.metaDataLevel and self.metaDataLevel != "single":
-            limits.append(levels.raidLevel(self.metaDataLevel).min_members)
-
-        if limits:
-            min_members = min(limits)
-
-        if limits and len(self.parents) - 1 < min_members:
-            raise errors.DeviceError("cannot remove member due to raid level "
-                              "constraints")
-
+        """ Raises a DeviceError if the device has a raid level and the
+            resulting number of parents would be fewer than the minimum
+            number required by the raid level.
+        """
+        levels = [btrfs.RAID_levels.raidLevel(l) for l in [self.dataLevel, self.metaDataLevel] if l]
+        if levels:
+            min_level = min((l for l in levels), key=lambda l: l.min_members)
+            min_members = min_level.min_members
+            if len(self.parents) - 1 < min_members:
+                raise errors.DeviceError("device %s requires at least %d membersfor raid level %s" % (self.name, min_members, min_level))
         super(BTRFSVolumeDevice, self)._removeParent(member)
 
     def _addSubVolume(self, vol):
-- 
1.8.3.1



More information about the anaconda-patches mailing list