[master/rhel7-branch][PATCH] Use blivet's getFreeSpace for limitting automatic swap size
Anne Mulhern
amulhern at redhat.com
Wed Jul 30 08:08:10 UTC 2014
----- Original Message -----
> From: "Vratislav Podzimek" <vpodzime at redhat.com>
> To: anaconda-patches at lists.fedorahosted.org
> Sent: Tuesday, July 29, 2014 4:23:04 PM
> Subject: [master/rhel7-branch][PATCH] Use blivet's getFreeSpace for limitting automatic swap size
>
> We should limit swap size to 10 % of available free space not overall disk
> space. Blivet's getFreeSpace can help us a lot with this.
>
> Resolves: rhbz#1053462
> Signed-off-by: Vratislav Podzimek <vpodzime at redhat.com>
> ---
> pyanaconda/kickstart.py | 30 ++++++++++++++++++++++--------
> pyanaconda/ui/gui/spokes/custom.py | 3 +++
> pyanaconda/ui/gui/spokes/storage.py | 12 +++---------
> 3 files changed, 28 insertions(+), 17 deletions(-)
>
> diff --git a/pyanaconda/kickstart.py b/pyanaconda/kickstart.py
> index c8ac223..8a3a942 100644
> --- a/pyanaconda/kickstart.py
> +++ b/pyanaconda/kickstart.py
> @@ -200,8 +200,7 @@ def removeExistingFormat(device, storage):
>
> def getAvailableDiskSpace(storage):
> """
> - Get overall disk space available on disks we may use (not free space on
> the
> - disks, but overall space on the disks).
> + Get overall disk space available on disks we may use.
>
> :param storage: blivet.Blivet instance
> :return: overall disk space available in MB
> @@ -209,13 +208,28 @@ def getAvailableDiskSpace(storage):
>
> """
>
> - disk_space = 0
> - for disk in storage.disks:
> - if not storage.config.clearPartDisks or \
> - disk.name in storage.config.clearPartDisks:
> - disk_space += disk.size
>
> - return disk_space
> + free_space = storage.getFreeSpace()
> + if free_space:
> + return sum(float(disk_free.convertTo("MB")) for disk_free, fs_free
> in free_space.values())
> + else:
> + return 0
I believe you can get rid of if condition here entirely, since getFreeSpace() always
returns a dict, never None.
> +
> +def refreshAutoSwapSize(storage):
> + """
> + Refresh size of the auto partitioning request for swap device
> accordingly to
Should be "according".
> + the current state of the storage configuration.
> +
> + :param storage: blivet.Blivet instance
> +
> + """
> +
> + for request in storage.autoPartitionRequests:
> + if request.fstype == "swap":
> + disk_space = getAvailableDiskSpace(storage)
> + request.size = swap_lib.swapSuggestion(disk_space=disk_space)
> + break
> +
>
> ###
> ### SUBCLASSES OF PYKICKSTART COMMAND HANDLERS
> diff --git a/pyanaconda/ui/gui/spokes/custom.py
> b/pyanaconda/ui/gui/spokes/custom.py
> index 61506fc..7372e47 100644
> --- a/pyanaconda/ui/gui/spokes/custom.py
> +++ b/pyanaconda/ui/gui/spokes/custom.py
> @@ -82,6 +82,8 @@ from pyanaconda.ui.gui.utils import setViewportBackground,
> gtk_action_wait, enli
> really_hide, really_show
> from pyanaconda.ui.gui.categories.system import SystemCategory
> from pyanaconda.ui.lib.disks import size_str
> +from pyanaconda.kickstart import refreshAutoSwapSize
> +
>
> # pylint: disable-msg=E0611
> from gi.repository import Gdk, Gtk
> @@ -2647,6 +2649,7 @@ class CustomPartitioningSpoke(NormalSpoke,
> StorageChecker):
> self.clear_errors()
> with ui_storage_logger():
> try:
> + refreshAutoSwapSize(self.__storage)
> doAutoPartition(self.__storage, self.data)
> except NoDisksError as e:
> # No handling should be required for this.
> diff --git a/pyanaconda/ui/gui/spokes/storage.py
> b/pyanaconda/ui/gui/spokes/storage.py
> index bdd48ef..db4a5c3 100644
> --- a/pyanaconda/ui/gui/spokes/storage.py
> +++ b/pyanaconda/ui/gui/spokes/storage.py
> @@ -53,14 +53,13 @@ from pyanaconda.ui.gui.spokes.lib.resize import
> ResizeDialog
> from pyanaconda.ui.gui.categories.system import SystemCategory
> from pyanaconda.ui.gui.utils import enlightbox, gtk_call_once,
> gtk_action_wait
>
> -from pyanaconda.kickstart import doKickstartStorage, getAvailableDiskSpace
> +from pyanaconda.kickstart import doKickstartStorage, refreshAutoSwapSize
> from blivet.size import Size
> from blivet.devices import MultipathDevice
> from blivet.errors import StorageError
> from blivet.errors import SanityError
> from blivet.errors import SanityWarning
> from blivet.platform import platform
> -from blivet.devicelibs import swap as swap_lib
> from pyanaconda.threads import threadMgr, AnacondaThread
> from pyanaconda.product import productName
> from pyanaconda.flags import flags
> @@ -340,13 +339,6 @@ class StorageSpoke(NormalSpoke, StorageChecker):
> # user may have set up before now.
> self.storage.config.clearNonExistent = self.data.autopart.autopart
>
> - # refresh the autopart swap size suggestion with currently selected
> disks
> - for request in self.storage.autoPartitionRequests:
> - if request.fstype == "swap":
> - disk_space = getAvailableDiskSpace(self.storage)
> - request.size =
> swap_lib.swapSuggestion(disk_space=disk_space)
> - break
> -
> def execute(self):
> # Spawn storage execution as a separate thread so there's no big
> delay
> # going back from this spoke to the hub while StorageChecker.run
> runs.
> @@ -872,6 +864,8 @@ class StorageSpoke(NormalSpoke, StorageChecker):
> # catch-all. Just stay on this spoke.
> return
>
> + if self.autopart:
> + refreshAutoSwapSize(self.storage)
> self.applyOnSkip = True
> NormalSpoke.on_back_clicked(self, button)
>
> --
> 1.9.3
>
> _______________________________________________
> anaconda-patches mailing list
> anaconda-patches at lists.fedorahosted.org
> https://lists.fedorahosted.org/mailman/listinfo/anaconda-patches
>
Just a few inline comments.
- mulhern
More information about the anaconda-patches
mailing list