[blivet:master 09/11] Use raid.size method to get size of device (#1085474)

mulhern amulhern at redhat.com
Fri Apr 11 15:23:10 UTC 2014


Resolves: fed#1085474

Requires modifying superBlockSize() so it can be passed as an argument to
size().

Signed-off-by: mulhern <amulhern at redhat.com>
---
 blivet/devices.py     | 25 ++++++++++++++-----------
 tests/devices_test.py |  1 -
 2 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/blivet/devices.py b/blivet/devices.py
index f6ed975..7bceb87 100644
--- a/blivet/devices.py
+++ b/blivet/devices.py
@@ -3269,9 +3269,16 @@ class MDRaidArrayDevice(ContainerDevice):
         log.debug("raw RAID %s size == %s", self.level, size)
         return size
 
-    @property
-    def superBlockSize(self):
-        return mdraid.get_raid_superblock_size(self.rawArraySize,
+    def superBlockSize(self, raw_array_size):
+        """Estimate the superblock size for a member of an array,
+           given the total available memory for this array and raid level.
+
+           :param raw_array_size: total available for this array and level
+           :type raw_array_size: :class:`~.size.Size`
+           :returns: estimated superblock size
+           :rtype: :class:`~.size.Size`
+        """
+        return mdraid.get_raid_superblock_size(raw_array_size,
                                                version=self.metadataVersion)
 
     @property
@@ -3291,16 +3298,12 @@ class MDRaidArrayDevice(ContainerDevice):
         if self.type == "mdbiosraidarray":
             return self._size
 
-        smallestMember = self.smallestMember
-        if smallestMember is None:
-            return 0
-
         if not self.exists or not self.partedDevice:
             try:
-                smallestMemberSize = smallestMember.size - self.superBlockSize
-                size = self.level.get_size(self.memberDevices,
-                   smallestMemberSize,
-                   self.chunkSize)
+                size = self.level.size([ d.size for d in self.devices ],
+                    self.memberDevices,
+                    self.chunkSize,
+                    self.superBlockSize)
             except (errors.MDRaidError, errors.RaidError) as e:
                 log.info("could not calculate size of device %s for raid level %s: %s", self, self.level, e)
                 size = 0
diff --git a/tests/devices_test.py b/tests/devices_test.py
index 885f958..5d07f65 100644
--- a/tests/devices_test.py
+++ b/tests/devices_test.py
@@ -87,7 +87,6 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
            "smallestMember" : self.assertIsNone,
            "spares" : lambda x, m: self.assertEqual(x, 0, m),
            "status" : self.assertFalse,
-           "superBlockSize" : lambda x, m: self.assertEqual(x, Size(spec="1 MiB"), m),
            "sysfsPath" : lambda x, m: self.assertEqual(x, "", m),
            "targetSize" : lambda x, m: self.assertEqual(x, Size(bytes=0), m),
            "uuid" : self.assertIsNone,
-- 
1.8.3.1



More information about the anaconda-patches mailing list