[PATCH 1/2] When creating a new md array check we have enough members (#533027)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Make MDRaidArrayDevice.__init__ raise a value exception when creating
a new (so non existing) raid set and there are not enough members for
the requested raid level.

And catch this value exception in the GUI raid dialog and kickstart raid
commands.
---
 iw/raid_dialog_gui.py |    7 ++++++-
 kickstart.py          |    5 ++++-
 storage/devices.py    |    6 ++++++
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/iw/raid_dialog_gui.py b/iw/raid_dialog_gui.py
index e2ffe9a..8431e71 100644
--- a/iw/raid_dialog_gui.py
+++ b/iw/raid_dialog_gui.py
@@ -201,12 +201,17 @@ class RaidEditor:
                 format = fmt_class(mountpoint=mountpoint)
                 members = len(raidmembers) - spares
 
-                request = self.storage.newMDArray(minor=raidminor,
+                try:
+                    request = self.storage.newMDArray(minor=raidminor,
                                                   level=raidlevel,
                                                   format=format,
                                                   parents=raidmembers,
                                                   totalDevices=len(raidmembers),
                                                   memberDevices=members)
+                except ValueError, e:
+                    self.intf.messageWindow(_("Error"), str(e),
+                                            custom_icon="error")
+                    continue
 
                 # we must destroy luks leaf before original raid request
                 if self.origrequest.format.type == "luks":
diff --git a/kickstart.py b/kickstart.py
index 147431b..aca5319 100644
--- a/kickstart.py
+++ b/kickstart.py
@@ -877,7 +877,10 @@ class Raid(commands.raid.F12_Raid):
             except KeyError:
                 pass
 
-            request = storage.newMDArray(**kwargs)
+            try:
+                request = storage.newMDArray(**kwargs)
+            except ValueError, e:
+                raise KickstartValueError, formatErrorMsg(self.lineno, msg=str(e))
 
             # FIXME: no way to specify an fsprofile right now
             # if pd.fsprofile:
diff --git a/storage/devices.py b/storage/devices.py
index 7b4b314..5049765 100644
--- a/storage/devices.py
+++ b/storage/devices.py
@@ -2197,6 +2197,12 @@ class MDRaidArrayDevice(StorageDevice):
         elif level is not None:
             self.level = mdraid.raidLevel(level)
 
+        # For new arrays check if we have enough members
+        if (not exists and parents and
+                len(parents) < mdraid.get_raid_min_members(self.level)):
+            raise ValueError, _("A RAID%d set requires atleast %d members") % (
+                           self.level, mdraid.get_raid_min_members(self.level))
+
         self.uuid = uuid
         self._totalDevices = numeric_type(totalDevices)
         self._memberDevices = numeric_type(memberDevices)
-- 
1.6.5.2

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list

[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux