Re: [PATCH 02/13] Handle resizing when setting targetSize for PartitionDevice

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

 



On Fri, 2009-03-13 at 18:09 -1000, David Cantrell wrote:
> If the user changes the targetSize of a PartitionDevice, calculate
> a new geometry for the partition and mark the PartitionDevice for
> resizing.  The new values are now in-memory and written to disk
> when resize() is called by the action's execute() method.

Looks good.

> ---
>  storage/devices.py |   48 +++++++++++++++++++++++++++++++++++++++++++++++-
>  1 files changed, 47 insertions(+), 1 deletions(-)
> 
> diff --git a/storage/devices.py b/storage/devices.py
> index de18113..f6880af 100644
> --- a/storage/devices.py
> +++ b/storage/devices.py
> @@ -482,7 +482,17 @@ class StorageDevice(Device):
>  
>          self.format = format
>          self.fstabComment = ""
> -        self.targetSize = self._size
> +        self._targetSize = self._size
> +
> +    def _getTargetSize(self):
> +        return self._targetSize
> +
> +    def _setTargetSize(self, newsize):
> +        self._targetSize = newsize
> +
> +    targetSize = property(lambda s: s._getTargetSize(),
> +                          lambda s, v: s._setTargetSize(v),
> +                          doc="Target size of this device")
>  
>      def __str__(self):
>          s = Device.__str__(self)
> @@ -889,6 +899,8 @@ class PartitionDevice(StorageDevice):
>  
>          self.bootable = False
>  
> +        self._resize = False
> +
>          StorageDevice.__init__(self, name, format=format, size=size,
>                                 major=major, minor=minor, exists=exists,
>                                 sysfsPath=sysfsPath, parents=parents)
> @@ -947,6 +959,30 @@ class PartitionDevice(StorageDevice):
>                 "partedPart": self.partedPartition, "disk": self.disk})
>          return s
>  
> +    def _setTargetSize(self, newsize):
> +        # a change in the target size means we need to resize the disk
> +        # if targetSize is 0, it means we are initializing, so don't jump
> +        # the gun and assume we're resizing
> +        if newsize != self.targetSize and self.targetSize != 0:
> +            self._resize = True
> +
> +        self._targetSize = newsize
> +
> +        if self._resize:
> +            currentGeom = self.partedPartition.geometry
> +            currentDev = currentGeom.device
> +            newLen = long(self.targetSize * 1024 * 1024) / currentDev.sectorSize
> +            geom = parted.Geometry(device=currentDev,
> +                                   start=currentGeom.start,
> +                                   length=newLen)
> +            constraint = parted.Constraint(exactGeom=geom)
> +
> +            partedDisk = self.disk.partedDisk
> +            partedDisk.setPartitionGeometry(partition=self.partedPartition,
> +                                            constraint=constraint,
> +                                            start=geom.start, end=geom.end)
> +            self.partedPartition = None
> +
>      @property
>      def partType(self):
>          """ Get the partition's type (as parted constant). """
> @@ -1102,6 +1138,16 @@ class PartitionDevice(StorageDevice):
>          self.exists = True
>          self.setup()
>  
> +    def resize(self, intf=None):
> +        """ Resize the device.
> +
> +            self.targetSize must be set to the new size.
> +        """
> +        log_method_call(self, self.name, status=self.status)
> +
> +        if self._resize:
> +            self.disk.commit()
> +
>      def destroy(self):
>          """ Destroy the device. """
>          log_method_call(self, self.name, status=self.status)

_______________________________________________
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