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

Re: [PATCH] [storage] Reinitialize drive if parted.Drive fails



On Tue, Mar 03, 2009 at 12:26:13PM -0500, Martin Sivak wrote:
> Hi,
> 
> I have a patch which should enable the user to reinitialize new drives, but I have to setup the storage testing environment first, so look at the logic while I'm getting all the pieces needed for testing it together.
> 
> Martin
> diff --git a/storage/devices.py b/storage/devices.py
> index 68bda21..5107559 100644
> --- a/storage/devices.py
> +++ b/storage/devices.py
> @@ -562,7 +562,7 @@ class DiskDevice(StorageDevice):
>  
>      def __init__(self, device, format=None,
>                   size=None, major=None, minor=None,
> -                 sysfsPath='', parents=None):
> +                 sysfsPath='', parents=None, init = False, labeltype = None):
>          """ Create a DiskDevice instance.
>  
>              Arguments:
> @@ -579,6 +579,10 @@ class DiskDevice(StorageDevice):
>                  parents -- a list of required Device instances
>                  removable -- whether or not this is a removable device
>  
> +                init -- initialize label on this drive
> +                labeltype -- type of the label to use during initialization
> +
> +
>              DiskDevices always exist.
>          """
>          StorageDevice.__init__(self, device, format=format, size=size,
> @@ -593,7 +597,10 @@ class DiskDevice(StorageDevice):
>          if not self.partedDevice:
>              raise DeviceError("cannot find parted device instance")
>          log.debug("creating parted Disk: %s" % self.path)
> -        self.partedDisk = parted.Disk(device=self.partedDevice)
> +        if init:
> +            self.partedDisk = parted.freshDisk(device=self.partedDevice, labeltype)
> +        else:
> +            self.partedDisk = parted.Disk(device=self.partedDevice)
>          if not self.partedDisk:
>              raise DeviceError("failed to create parted Disk")
>  
> diff --git a/storage/devicetree.py b/storage/devicetree.py
> index b6fee30..7a91946 100644
> --- a/storage/devicetree.py
> +++ b/storage/devicetree.py
> @@ -27,6 +27,7 @@ from devices import *
>  from deviceaction import *
>  import formats
>  from udev import *
> +import parted
>  
>  import gettext
>  _ = lambda x: gettext.ldgettext("anaconda", x)
> @@ -727,11 +728,33 @@ class DeviceTree(object):
>              log.debug("%s is a disk" % name)
>              device = self.getDeviceByName(name)
>              if device is None:
> -                device = DiskDevice(name,
> +                try:
> +                    device = DiskDevice(name,
>                                      major=udev_device_get_major(info),
>                                      minor=udev_device_get_minor(info),
>                                      sysfsPath=sysfs_path)
> -                self._addDevice(device)

I know you already commited this.  but I really think we should be doing
this in another place.
We should be doing this in the DiskDevice Class, not here.  So every time
that it hits this, with any disk type, we will use this code.
I'd really prefer that to repeating this process for every type of
DiskDevice and every time I want to create one.

Regards.

> +                    self._addDevice(device)
> +                except parted._ped.IOException: #drive not initialized?
> +                    if not intf:
> +                        self.ignoredDisks.append(name)
> +                    else:
> +                        rc = intf.messageWindow(_("Warning"),
> +                                _("Error processing drive %s.\n"
> +                                  "Maybe it needs to be reinitialized."
> +                                  "YOU WILL LOSE ALL DATA ON THIS DRIVE!"),
> +                                type="custom",
> +                                custom_buttons = [ _("_Ignore drive"),
> +                                                   _("_Re-initialize drive") ],
> +                                custom_icon="question")
> +                        if rc == 0:
> +                            self.ignoredDisks.append(name)
> +                        else:
> +                            device = DiskDevice(name,
> +                                            major=udev_device_get_major(info),
> +                                            minor=udev_device_get_minor(info),
> +                                            sysfsPath=sysfs_path, init = True,
> +                                            labeltype = platform.getPlatform(None).diskType)
> +                            self._addDevice(device)
>          elif udev_device_is_partition(info):
>              log.debug("%s is a partition" % name)
>              device = self.getDeviceByName(name)

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

-- 
Joel Andres Granados
Brno, Czech Republic, Red Hat.


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