Skip to content

Commit

Permalink
Merge pull request #1176 from vojtechtrefny/3.9-devel_fix-pvremove
Browse files Browse the repository at this point in the history
Fix checking PV free space when removing it from a VG (#2232328)
  • Loading branch information
vojtechtrefny authored Nov 27, 2023
2 parents 9ae0d18 + 53c3b6d commit ee6a809
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
10 changes: 8 additions & 2 deletions blivet/devices/lvm.py
Original file line number Diff line number Diff line change
Expand Up @@ -317,9 +317,15 @@ def _remove(self, member):
if lv.exists:
lv.setup()

# if format was already scheduled for removal, use original_format
if member.format != "lvmpv":
fmt = member.original_format
else:
fmt = member.format

# do not run pvmove on empty PVs
member.format.update_size_info()
if member.format.free < member.format.current_size:
fmt.update_size_info()
if fmt.free < fmt.current_size:
try:
blockdev.lvm.pvmove(member.path)
except blockdev.LVMError as err:
Expand Down
10 changes: 9 additions & 1 deletion tests/storage_tests/devices_test/lvm_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -396,9 +396,17 @@ def test_lvm_pvs_add_remove(self):
pv1 = self.storage.devicetree.get_device_by_name(pv1.name)
ac = blivet.deviceaction.ActionRemoveMember(vg, pv1)
self.storage.devicetree.actions.add(ac)
self.storage.do_it()

self.assertIsNone(pv1.format.vg_name)

# schedule also removing the lvmpv format from the PV
ac = blivet.deviceaction.ActionDestroyFormat(pv1)
self.storage.devicetree.actions.add(ac)

self.storage.do_it()

self.assertIsNone(pv1.format.type)

self.storage.reset()

self.storage.reset()
Expand Down

0 comments on commit ee6a809

Please sign in to comment.