blivet-gui/backport-Do-not-allow-setting-chunk-size-for-RAID1.patch
2021-12-22 14:31:52 +08:00

125 lines
5.3 KiB
Diff

From 6e34d491e5f930af42a407bd3ef9d16553bf7ee4 Mon Sep 17 00:00:00 2001
From: Vojtech Trefny <vtrefny@redhat.com>
Date: Mon, 23 Aug 2021 15:14:49 +0200
Subject: [PATCH 1/2] pylint: Ignore false positive assignment-from-no-return
warning
---
blivetgui/communication/proxy_utils.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/blivetgui/communication/proxy_utils.py b/blivetgui/communication/proxy_utils.py
index 4888e2b..ec822e4 100644
--- a/blivetgui/communication/proxy_utils.py
+++ b/blivetgui/communication/proxy_utils.py
@@ -59,7 +59,7 @@ class ProxyID(object):
_newid_gen = functools.partial(next, itertools.count())
def __init__(self):
- self.id = self._newid_gen()
+ self.id = self._newid_gen() # pylint: disable=assignment-from-no-return
def __repr__(self):
return "'Proxy ID, %s'" % self.id
From dec1f8d481c19eeed91b6f740cdcbcb9487daf21 Mon Sep 17 00:00:00 2001
From: Vojtech Trefny <vtrefny@redhat.com>
Date: Mon, 23 Aug 2021 15:15:16 +0200
Subject: [PATCH 2/2] Do not allow setting chunk size for RAID 1 (#1996223)
RAID 1 doesn't support chunk size, we shouldn't allow to set it in
the UI and also stop to set the default 512 KiB. See also
https://github.com/storaged-project/blivet/pull/969
---
blivetgui/blivet_utils.py | 6 +++++-
blivetgui/dialogs/add_dialog.py | 15 ++++++++++++---
tests/blivetgui_tests/add_dialog_test.py | 12 ++++++++++++
3 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/blivetgui/blivet_utils.py b/blivetgui/blivet_utils.py
index aa2b72f..6fe99a7 100644
--- a/blivetgui/blivet_utils.py
+++ b/blivetgui/blivet_utils.py
@@ -1209,12 +1209,16 @@ def _create_mdraid(self, user_input):
actions.extend(part_actions)
md_parents = [ac.device for ac in actions if ac.is_format and ac._format.type == "mdmember"]
+ if user_input.advanced:
+ chunk_size = user_input.advanced["chunk_size"]
+ else:
+ chunk_size = None
new_md = MDRaidArrayDevice(parents=md_parents,
name=device_name,
level=user_input.raid_level,
member_devices=len(md_parents),
total_devices=len(md_parents),
- chunk_size=user_input.advanced["chunk_size"])
+ chunk_size=chunk_size)
actions.append(blivet.deviceaction.ActionCreateDevice(new_md))
if user_input.encrypt:
diff --git a/blivetgui/dialogs/add_dialog.py b/blivetgui/dialogs/add_dialog.py
index 2cb437d..81da95c 100644
--- a/blivetgui/dialogs/add_dialog.py
+++ b/blivetgui/dialogs/add_dialog.py
@@ -489,6 +489,10 @@ def update_raid_type_chooser(self, keep_selection=False):
def on_raid_type_changed(self, _widget):
self.add_size_area()
+ if self.selected_type == "mdraid":
+ self.add_advanced_options()
+ self.show_widgets(["advanced"])
+
def select_selected_free_region(self):
""" In parent list select the free region user selected checkbox as checked
"""
@@ -859,10 +863,15 @@ def add_advanced_options(self):
self.advanced.destroy()
if device_type in ("lvm", "lvmvg", "partition", "mdraid"):
- self.advanced = AdvancedOptions(self, device_type, self.selected_parent, self.selected_free)
- self.widgets_dict["advanced"] = [self.advanced]
+ if device_type == "mdraid" and self._raid_chooser.selected_level.name == "raid1":
+ self.advanced = None
+ self.widgets_dict["advanced"] = []
+ else:
+ self.advanced = AdvancedOptions(self, device_type, self.selected_parent,
+ self.selected_free)
+ self.widgets_dict["advanced"] = [self.advanced]
- self.grid.attach(self.advanced.expander, 0, 15, 6, 1)
+ self.grid.attach(self.advanced.expander, 0, 15, 6, 1)
else:
self.advanced = None
diff --git a/tests/blivetgui_tests/add_dialog_test.py b/tests/blivetgui_tests/add_dialog_test.py
index 4a53ca5..9d1b3e6 100644
--- a/tests/blivetgui_tests/add_dialog_test.py
+++ b/tests/blivetgui_tests/add_dialog_test.py
@@ -10,6 +10,7 @@
from blivet.size import Size
from blivet import formats
+from blivet.devicelibs import raid
def supported_filesystems():
@@ -583,6 +584,17 @@ def test_raid_type(self):
# raid0 type is selected --> we should have 2 size areas, both with max size 4 GiB (smaller free space size)
self.assertEqual(add_dialog.size_area.max_size, Size("8 GiB"))
+ # raid0 is selected --> advanced options (chunk size) should be visible
+ self.assertIsNotNone(add_dialog.advanced)
+
+ # select raid1 --> advanced options (chunk size) should be disappear
+ add_dialog._raid_chooser.selected_level = raid.RAID1
+ self.assertIsNone(add_dialog.advanced)
+
+ # back to raid0 just to be sure
+ add_dialog._raid_chooser.selected_level = raid.RAID0
+ self.assertIsNotNone(add_dialog.advanced)
+
@patch("blivetgui.dialogs.message_dialogs.ErrorDialog", error_dialog)
def test_mountpoint_validity_check(self):
parent_device = self._get_parent_device()