From: Kotresh HR Date: Thu, 9 Jun 2022 08:00:59 +0000 (+0530) Subject: mgr/volumes: V2 Fix for test_subvolume_retain_snapshot_invalid_recreate X-Git-Tag: v17.2.2~3 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=7f9975ad302ec8844e33741500da16fef27a6b4e;p=ceph.git mgr/volumes: V2 Fix for test_subvolume_retain_snapshot_invalid_recreate Signed-off-by: Kotresh HR (cherry picked from commit ac791879096c8a9e5bda4eef69f1269eee819932) --- diff --git a/src/pybind/mgr/volumes/fs/operations/versions/subvolume_base.py b/src/pybind/mgr/volumes/fs/operations/versions/subvolume_base.py index 6047516e4b8db..bb4605cb16e73 100644 --- a/src/pybind/mgr/volumes/fs/operations/versions/subvolume_base.py +++ b/src/pybind/mgr/volumes/fs/operations/versions/subvolume_base.py @@ -16,6 +16,7 @@ from ..trash import create_trashcan, open_trashcan from ...fs_util import get_ancestor_xattr from ...exception import MetadataMgrException, VolumeException from .auth_metadata import AuthMetadataManager +from .subvolume_attrs import SubvolumeStates log = logging.getLogger(__name__) @@ -116,7 +117,7 @@ class SubvolumeBase(object): @property def state(self): """ Subvolume state, one of SubvolumeStates """ - raise NotImplementedError + return SubvolumeStates.from_value(self.metadata_mgr.get_global_option(MetadataManager.GLOBAL_META_KEY_STATE)) @property def subvol_type(self): @@ -329,7 +330,10 @@ class SubvolumeBase(object): self.metadata_mgr.refresh() log.debug("loaded subvolume '{0}'".format(self.subvolname)) subvolpath = self.metadata_mgr.get_global_option(MetadataManager.GLOBAL_META_KEY_PATH) - if not self.legacy_mode and self.base_path.decode('utf-8') != str(Path(subvolpath).parent): + # subvolume with retained snapshots has empty path, don't mistake it for + # fabricated metadata. + if (not self.legacy_mode and self.state != SubvolumeStates.STATE_RETAINED and + self.base_path.decode('utf-8') != str(Path(subvolpath).parent)): raise MetadataMgrException(-errno.ENOENT, 'fabricated .meta') except MetadataMgrException as me: if me.errno in (-errno.ENOENT, -errno.EINVAL) and not self.legacy_mode: diff --git a/src/pybind/mgr/volumes/fs/operations/versions/subvolume_v1.py b/src/pybind/mgr/volumes/fs/operations/versions/subvolume_v1.py index 8c98b3736222f..107f1a4681863 100644 --- a/src/pybind/mgr/volumes/fs/operations/versions/subvolume_v1.py +++ b/src/pybind/mgr/volumes/fs/operations/versions/subvolume_v1.py @@ -694,7 +694,7 @@ class SubvolumeV1(SubvolumeBase, SubvolumeTemplate): @property def state(self): - return SubvolumeStates.from_value(self.metadata_mgr.get_global_option(MetadataManager.GLOBAL_META_KEY_STATE)) + return super(SubvolumeV1, self).state @state.setter def state(self, val):