Re: [PATCH] Add dmraid functionality to new storage code.

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

 





Joel Granados Moreno wrote:

<huge snip>

> diff --git a/storage/__init__.py b/storage/__init__.py
> index 7bac367..6c241c2 100644
> --- a/storage/__init__.py
> +++ b/storage/__init__.py
> @@ -238,7 +238,11 @@ class Storage(object):
>              does not necessarily reflect the actual on-disk state of the
>              system's disks.
>          """
> -        disks = self.devicetree.getDevicesByType("disk")
> +        disks = []
> +        devices = self.devicetree.devices
> +        for d in devices:
> +            if isinstance(devices[d], DiskDevice):
> +                disks.append(devices[d])
>          disks.sort(key=lambda d: d.name)
>          return disks
>
> @@ -250,7 +254,11 @@ class Storage(object):
>              does not necessarily reflect the actual on-disk state of the
>              system's disks.
>          """
> -        partitions = self.devicetree.getDevicesByType("partition")
> +        partitions = []
> +        devices = self.devicetree.devices
> +        for d in devices:
> +            if isinstance(devices[d], PartitionDevice):
> +                partitions.append(devices[d])
>          partitions.sort(key=lambda d: d.name)
>          return partitions
>

We could use the new devicetree.getDevicesByInstance you add in this same patch here instead.

<more snip>

@@ -1059,12 +1127,27 @@ class PartitionDevice(StorageDevice):
         return disk
def _setDisk(self, disk):
+        """Change the parent.
+
+        Setting up a disk is not trivial.  It has the potential to change
+        the underlying object.  If necessary we must also change this object.
+        """
         log_method_call(self, self.name, old=self.disk, new=disk)
         if self.disk:
             self.disk.removeChild()
self.parents = [disk]
         disk.addChild()
+        if isinstance(disk, DMRaidArrayDevice):
+            # modify the partition so it can look like the DMRaidPartitionDevice.
+
+            self._type = "dmraid partition"
+            self._packages = ["dmraid"]
+            self.devDir = "/dev/mapper"
+            self.updateSysfsPath = DMDevice.updateSysfsPath
+            self.getDMNode = DMDevice.getDMNode
+
+
disk = property(lambda p: p._getDisk(), lambda p,d: p._setDisk(d))


What if we go the other way around so from being a partition on a DMRaidArrayDevice
to one on a regular DiskDevice ?

@@ -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 think you should just omit the setter then, this will cause python to throw an error
rather then to ignore the write silently. I think dlehman made a similar remark to an
earlier version of this patch.

<huge snip>

Regards,

Hans

_______________________________________________
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