Skip to content

Commit c254097

Browse files
committed
fix: Allow small size differences to match the device min size
We are currently allowing up to 2 % size difference from requested size when creating or resizing volumes to fit them into pool free space (see #199). This applies the same logic for device minimum size limits when resizing. Resolves: RHEL-82825
1 parent b98726d commit c254097

1 file changed

Lines changed: 22 additions & 10 deletions

File tree

library/blivet.py

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -785,16 +785,28 @@ def _resize(self):
785785
if not self._device.resizable:
786786
return
787787

788-
trim_percent = (1.0 - float(self._device.max_size / size)) * 100
789-
log.debug("resize: size=%s->%s ; trim=%s", self._device.size, size, trim_percent)
790-
if size > self._device.max_size and trim_percent <= MAX_TRIM_PERCENT:
791-
log.info("adjusting %s resize target from %s to %s to fit in free space",
792-
self._volume['name'],
793-
size,
794-
self._device.max_size)
795-
size = self._device.max_size
796-
if size == self._device.size:
797-
return
788+
if size > self._device.size:
789+
trim_percent = abs((1.0 - float(self._device.max_size / size)) * 100)
790+
log.debug("resize: size=%s->%s ; trim=%s", self._device.size, size, trim_percent)
791+
if size > self._device.max_size and trim_percent <= MAX_TRIM_PERCENT:
792+
log.info("adjusting %s resize target from %s to %s to fit in free space",
793+
self._volume['name'],
794+
size,
795+
self._device.max_size)
796+
size = self._device.max_size
797+
if size == self._device.size:
798+
return
799+
elif size < self._device.size:
800+
trim_percent = abs((1.0 - float(self._device.min_size / size)) * 100)
801+
log.debug("resize: size=%s->%s ; trim=%s", self._device.size, size, trim_percent)
802+
if size < self._device.min_size and trim_percent <= MAX_TRIM_PERCENT:
803+
log.info("adjusting %s resize target from %s to %s match device min size",
804+
self._volume['name'],
805+
size,
806+
self._device.min_size)
807+
size = self._device.min_size
808+
if size == self._device.size:
809+
return
798810

799811
if not self._device.min_size <= size <= self._device.max_size:
800812
raise BlivetAnsibleError("volume '%s' cannot be resized to '%s'" % (self._volume['name'], size))

0 commit comments

Comments
 (0)