David Lehman wrote:
Overall it is good, but there are a couple of things you need to fix.
See below.
diff --git a/storage/devices.py b/storage/devices.py
index 84cfe1b..dd5a4f1 100644
--- a/storage/devices.py
+++ b/storage/devices.py
@@ -2069,41 +2152,130 @@ class MDRaidArrayDevice(StorageDevice):
self.exists = False
-class DMRaidArrayDevice(DMDevice):
+class DMRaidArrayDevice(DiskDevice):
""" A dmraid (device-mapper RAID) device """
_type = "dm-raid array"
_packages = ["dmraid"]
+ devDir = "/dev/mapper"
- def __init__(self, name, format=None, size=None,
- exists=None, parents=None, sysfsPath=''):
+ def __init__(self, name, raidSet=None, level=None, format=None, size=None,
+ major=None, minor=None, parents=None, sysfsPath=''):
""" Create a DMRaidArrayDevice instance.
Arguments:
- name -- the device name (generally a device node's basename)
+ name -- the dmraid name also the device node's basename
Keyword Arguments:
+ raidSet -- the RaidSet object from block
+ level -- the type of dmraid
parents -- a list of the member devices
sysfsPath -- sysfs device path
size -- the device's size
format -- a DeviceFormat instance
- exists -- indicates whether this is an existing device
"""
if isinstance(parents, list):
for parent in parents:
if not parent.format or parent.format.type != "dmraidmember":
raise ValueError("parent devices must contain dmraidmember format")
- DMDevice.__init__(self, name, format=format, size=size,
- parents=parents, sysfsPath=sysfsPath,
- exists=exists)
+ DiskDevice.__init__(self, name, format=format, size=size,
+ major=major, minor=minor,
+ parents=parents, sysfsPath=sysfsPath)
- def probe(self):
- """ Probe for any missing information about this device.
+ self.formatClass = get_device_format_class("dmraidmember")
+ if not self.formatClass:
+ raise DeviceError("cannot find class for 'dmraidmember'")
- size
+
+ self._raidSet = raidSet
+ self._level = level
+
+ @property
+ def raidSet(self):
+ return self._raidSet
+
+ @raidSet.setter
+ def raidSet(self, val):
+ # If we change self._raidSet, parents list will be invalid.
+ # Don't allow the change.
+ pass
I still think you should just not define this setter -- how is silently
ignoring things better than pointing out the error? This will mask
programming errors.
Ack.
diff --git a/storage/devicetree.py b/storage/devicetree.py
index 3494d5a..a83279d 100644
--- a/storage/devicetree.py
+++ b/storage/devicetree.py
@@ -914,8 +945,38 @@ class DeviceTree(object):
parents=[device])
self._addDevice(md_array)
elif format.type == "dmraidmember":
- # look up or create the dmraid array
- pass
+ major = udev_device_get_major(info)
+ minor = udev_device_get_minor(info)
+ # Have we already created the DMRaidArrayDevice?
+ rs = block.getRaidSetFromRelatedMem(uuid=uuid, name=name,
+ major=major, minor=minor)
+ if rs is None:
+ # FIXME: Should handle not finding a dmriad dev better
+ pass
Shouldn't this be 'return'?
Ack.
diff --git a/storage/udev.py b/storage/udev.py
index 6df00c8..a39b98c 100644
--- a/storage/udev.py
+++ b/storage/udev.py
@@ -270,4 +270,37 @@ def udev_device_get_lv_sizes(info):
return [float(s) / 1024 for s in sizes]
+def udev_device_is_dmraid(info):
+ # Note that this function does *not* identify raid sets.
+ # Tests to see if device is parto of a dmraid set.
+ # dmraid and mdriad have the same ID_FS_USAGE string, ID_FS_TYPE has a
+ # string that describes the type of dmraid (isw_raid_member...), I don't
+ # want to maintain a list and mdraid's ID_FS_TYPE='linux_raid_member', so
+ # dmraid will be everything that is raid and not linux_raid_member
+ if info.has_key("ID_FS_USAGE") and info.has_key("ID_FS_TYPE") and \
+ info["ID_FS_USAGE"] == "raid" and \
+ info["ID_FS_TYPE"] != "linux_raid_member":
+ return True
As I said before, this will identify LVM PVs as dmraid devices. This has
to be fixed.
Weird, I had that fixed, that somehow seems to have gone missing from the patch.
I've attached the patch fixing this.
Regards,
Hans
_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
>From 5f3f06aa5bc8d0386de33ec67d6fc2b1acd4f7a7 Mon Sep 17 00:00:00 2001
From: Hans de Goede <hdegoede@xxxxxxxxxx>
Date: Mon, 2 Mar 2009 10:50:34 +0100
Subject: [PATCH 8/9] Do not identify LVM2 PV's as dmraid
We need to fix this better, but this works for now.
---
storage/udev.py | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/storage/udev.py b/storage/udev.py
index d9fff4d..354bd97 100644
--- a/storage/udev.py
+++ b/storage/udev.py
@@ -278,13 +278,16 @@ def udev_device_get_lv_sizes(info):
def udev_device_is_dmraid(info):
# Note that this function does *not* identify raid sets.
# Tests to see if device is parto of a dmraid set.
- # dmraid and mdriad have the same ID_FS_USAGE string, ID_FS_TYPE has a
+ # dmraid and mdraid and lvm have the same ID_FS_USAGE string :(
+ # ID_FS_TYPE has a
# string that describes the type of dmraid (isw_raid_member...), I don't
# want to maintain a list and mdraid's ID_FS_TYPE='linux_raid_member', so
# dmraid will be everything that is raid and not linux_raid_member
+ # and not LVM
if info.has_key("ID_FS_USAGE") and info.has_key("ID_FS_TYPE") and \
info["ID_FS_USAGE"] == "raid" and \
- info["ID_FS_TYPE"] != "linux_raid_member":
+ info["ID_FS_TYPE"] != "linux_raid_member" and \
+ info["ID_FS_TYPE"] != "LVM2_member":
return True
return False
--
1.6.1.3
_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list