[blivet:master 13/26] Make createBitmap() a property and update tests appropriately.

mulhern amulhern at redhat.com
Thu May 29 18:47:31 UTC 2014


createBitmap() seems to be a simple function of the device properties.
All of these properties are relevant when its value is used in calling
mdcreate(), so they should all be taken into account at that time.
---
 blivet/devices.py     | 17 +++++++++--------
 tests/devices_test.py |  7 ++++++-
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/blivet/devices.py b/blivet/devices.py
index 9480bae..868d48f 100644
--- a/blivet/devices.py
+++ b/blivet/devices.py
@@ -3349,13 +3349,18 @@ class MDRaidArrayDevice(ContainerDevice):
             :param value: new raid level
             :param type:  a valid raid level descriptor
             :returns:     None
-
-            Sets createBitmap True unless level is 0
         """
         self._level = mdraid.getRaidLevel(value) # pylint: disable=attribute-defined-outside-init
 
-        # bitmaps are not meaningful on raid0 according to mdadm-3.0.3
-        self.createBitmap = self._level.name != "raid0" # pylint: disable=attribute-defined-outside-init
+    @property
+    def createBitmap(self):
+        """ Whether or not a bitmap should be created on the array.
+
+            If the the array is sufficiently small, a bitmap yields no benefit.
+
+            If the array has no redundancy, a bitmap is just pointless.
+        """
+        return self.level.has_redundancy and self.size >= 1000 and  self.format.type != "swap"
 
     def getSuperBlockSize(self, raw_array_size):
         """Estimate the superblock size for a member of an array,
@@ -3689,10 +3694,6 @@ class MDRaidArrayDevice(ContainerDevice):
            self.format.type == "prepboot":
             self.metadataVersion = "1.0"
 
-        # Bitmaps are not useful for swap and small partitions
-        if self.size < 1000 or self.format.type == "swap":
-            self.createBitmap = False # pylint: disable=attribute-defined-outside-init
-
     def _postCreate(self):
         # this is critical since our status method requires a valid sysfs path
         md_node = mdraid.md_node_from_name(self.name)
diff --git a/tests/devices_test.py b/tests/devices_test.py
index 6598eba..3d6ec5e 100644
--- a/tests/devices_test.py
+++ b/tests/devices_test.py
@@ -62,7 +62,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
 
     def setUp(self):
         self._state_functions = {
-           "createBitmap" : self.assertTrue,
+           "createBitmap" : self.assertFalse,
            "currentSize" : lambda x, m: self.assertEqual(x, Size(0), m),
            "description" : self.assertIsNotNone,
            "devices" : lambda x, m: self.assertEqual(len(x), 0, m) and
@@ -320,6 +320,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
                         totalDevices=lambda x, m: self.assertEqual(x, 3, m))
 
         self.stateCheck(self.dev14,
+                        createBitmap=self.assertTrue,
                         devices=lambda x, m: self.assertEqual(len(x), 3, m),
                         level=lambda x, m: self.assertEqual(x.number, 4, m),
                         memberDevices=lambda x, m: self.assertEqual(x, 3, m),
@@ -328,6 +329,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
                         totalDevices=lambda x, m: self.assertEqual(x, 3, m))
 
         self.stateCheck(self.dev15,
+                        createBitmap=self.assertTrue,
                         devices=lambda x, m: self.assertEqual(len(x), 3, m),
                         level=lambda x, m: self.assertEqual(x.number, 5, m),
                         memberDevices=lambda x, m: self.assertEqual(x, 3, m),
@@ -336,6 +338,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
                         totalDevices=lambda x, m: self.assertEqual(x, 3, m))
 
         self.stateCheck(self.dev16,
+                        createBitmap=self.assertTrue,
                         devices=lambda x, m: self.assertEqual(len(x), 4, m),
                         level=lambda x, m: self.assertEqual(x.number, 6, m),
                         memberDevices=lambda x, m: self.assertEqual(x, 4, m),
@@ -344,6 +347,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
                         totalDevices=lambda x, m: self.assertEqual(x, 4, m))
 
         self.stateCheck(self.dev17,
+                        createBitmap=self.assertTrue,
                         devices=lambda x, m: self.assertEqual(len(x), 4, m),
                         level=lambda x, m: self.assertEqual(x.number, 10, m),
                         memberDevices=lambda x, m: self.assertEqual(x, 4, m),
@@ -352,6 +356,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
                         totalDevices=lambda x, m: self.assertEqual(x, 4, m))
 
         self.stateCheck(self.dev18,
+                        createBitmap=self.assertTrue,
                         devices=lambda x, m: self.assertEqual(len(x), 4, m),
                         level=lambda x, m: self.assertEqual(x.number, 10, m),
                         memberDevices=lambda x, m: self.assertEqual(x, 4, m),
-- 
1.8.3.1



More information about the anaconda-patches mailing list