From 059b99967c6aaca02183122022275ae463014212 Mon Sep 17 00:00:00 2001 From: mengwenhua Date: Sat, 7 Jan 2023 17:45:51 +0800 Subject: [PATCH] Sim fs resize Signed-off-by: mengwenhua --- ..._block_rounding-Use-integer-division.patch | 29 ++++++++ ...e-fs-_resize-Change-re-size-behavior.patch | 72 +++++++++++++++++++ libstoragemgmt.spec | 8 ++- 3 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 backport-0001-simarray._block_rounding-Use-integer-division.patch create mode 100644 backport-0002-sim_array-volume-fs-_resize-Change-re-size-behavior.patch diff --git a/backport-0001-simarray._block_rounding-Use-integer-division.patch b/backport-0001-simarray._block_rounding-Use-integer-division.patch new file mode 100644 index 0000000..7346c35 --- /dev/null +++ b/backport-0001-simarray._block_rounding-Use-integer-division.patch @@ -0,0 +1,29 @@ +From 2ba3527ae5dc345ee91797c6445bb7fe009b02e3 Mon Sep 17 00:00:00 2001 +From: Tony Asleson +Date: Thu, 23 May 2019 14:35:51 -0500 +Subject: [PATCH 1/2] simarray._block_rounding: Use integer division + +This was causing problems for py2 vs. py3 code. Always use integer +division. + +Signed-off-by: Tony Asleson +--- + plugin/sim/simarray.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/plugin/sim/simarray.py b/plugin/sim/simarray.py +index 6f0a582..bc7817b 100644 +--- a/plugin/sim/simarray.py ++++ b/plugin/sim/simarray.py +@@ -1268,7 +1268,7 @@ def _check_pool_free_space(self, sim_pool_id, size_bytes): + + @staticmethod + def _block_rounding(size_bytes): +- return (size_bytes + BackStore.BLK_SIZE - 1) / \ ++ return (size_bytes + BackStore.BLK_SIZE - 1) // \ + BackStore.BLK_SIZE * BackStore.BLK_SIZE + + def sim_vol_create(self, name, size_bytes, sim_pool_id, is_hw_raid_vol=0): +-- +2.37.3.windows.1 + diff --git a/backport-0002-sim_array-volume-fs-_resize-Change-re-size-behavior.patch b/backport-0002-sim_array-volume-fs-_resize-Change-re-size-behavior.patch new file mode 100644 index 0000000..2fde355 --- /dev/null +++ b/backport-0002-sim_array-volume-fs-_resize-Change-re-size-behavior.patch @@ -0,0 +1,72 @@ +From 4e8c6efae3bf8c016c560e58771b7a4db7032efe Mon Sep 17 00:00:00 2001 +From: Tony Asleson +Date: Thu, 23 May 2019 14:43:41 -0500 +Subject: [PATCH 2/2] sim_array [volume|fs]_resize: Change re-size behavior + +The simulator only allows size increments of a block size. The code was +returning success if the user specified 1 byte more for the resize, but +internally it wasn't updating the size, eg. it was leaving the previous +rounded down size. This goes against the documentation for the volume +re-size where we may round up for resize. This change rounds up the +supplied value. If the rounded up size matches current size we return +no state change, else we round up and update the simulator value to match. + +This also matches the expected behavior that when successful the new size +will indeed be different, although it may be larger than specified and +if the exact operation is repeated, it will fail with no state change. + +Signed-off-by: Tony Asleson +--- + plugin/sim/simarray.py | 22 ++++++---------------- + 1 file changed, 6 insertions(+), 16 deletions(-) + +diff --git a/plugin/sim/simarray.py b/plugin/sim/simarray.py +index bc7817b..8552e3d 100644 +--- a/plugin/sim/simarray.py ++++ b/plugin/sim/simarray.py +@@ -1367,18 +1367,12 @@ def _sim_ag_ids_of_masked_vol(self, sim_vol_id): + 'vol_masks', 'vol_id="%s"' % sim_vol_id)) + + def sim_vol_resize(self, sim_vol_id, new_size_bytes): +- org_new_size_bytes = new_size_bytes + new_size_bytes = BackStore._block_rounding(new_size_bytes) + sim_vol = self.sim_vol_of_id(sim_vol_id) + if sim_vol['total_space'] == new_size_bytes: +- if org_new_size_bytes != new_size_bytes: +- # Even volume size is identical to rounded size, +- # but it's not what user requested, hence we silently pass. +- return +- else: +- raise LsmError( +- ErrorNumber.NO_STATE_CHANGE, +- "Volume size is identical to requested") ++ raise LsmError( ++ ErrorNumber.NO_STATE_CHANGE, ++ "Volume size is identical to requested") + + sim_pool = self.sim_pool_of_id(sim_vol['pool_id']) + +@@ -1610,17 +1604,13 @@ def sim_fs_delete(self, sim_fs_id): + self._data_delete("fss", 'id="%s"' % sim_fs_id) + + def sim_fs_resize(self, sim_fs_id, new_size_bytes): +- org_new_size_bytes = new_size_bytes + new_size_bytes = BackStore._block_rounding(new_size_bytes) + sim_fs = self.sim_fs_of_id(sim_fs_id) + + if sim_fs['total_space'] == new_size_bytes: +- if new_size_bytes != org_new_size_bytes: +- return +- else: +- raise LsmError( +- ErrorNumber.NO_STATE_CHANGE, +- "File System size is identical to requested") ++ raise LsmError( ++ ErrorNumber.NO_STATE_CHANGE, ++ "File System size is identical to requested") + + # TODO(Gris Ge): If a fs is in a clone/snapshot relationship, resize + # should be handled properly. +-- +2.37.3.windows.1 + diff --git a/libstoragemgmt.spec b/libstoragemgmt.spec index 04d3998..2ec2231 100644 --- a/libstoragemgmt.spec +++ b/libstoragemgmt.spec @@ -2,7 +2,7 @@ %define with_python2 0 Name: libstoragemgmt Version: 1.8.0 -Release: 6 +Release: 7 Summary: Storage array management library License: LGPLv2+ URL: https://github.com/libstorage/libstoragemgmt @@ -12,6 +12,9 @@ Patch1: 0001-change-run-dir.patch Patch2: 0002-Specify-signed-char.patch Patch3: fix-too-many-argument-for-format.patch +Patch6000: backport-0001-simarray._block_rounding-Use-integer-division.patch +Patch6001: backport-0002-sim_array-volume-fs-_resize-Change-re-size-behavior.patch + BuildRequires: gcc gcc-c++ autoconf automake libtool libxml2-devel check-devel perl-interpreter BuildRequires: openssl-devel glib2-devel systemd bash-completion libconfig-devel systemd-devel BuildRequires: procps sqlite-devel python3-six python3-devel systemd systemd-devel chrpath valgrind @@ -372,6 +375,9 @@ fi %{_mandir}/man*/* %changelog +* Sat Jan 7 2023 mengwenhua - 1.8.0-7 +- Sim fs resize + * Fri Jan 28 2022 wulei - 1.8.0-6 - fix too many argument for format -- Gitee