From 7f9975ad302ec8844e33741500da16fef27a6b4e Mon Sep 17 00:00:00 2001 From: Kotresh HR Date: Thu, 9 Jun 2022 13:30:59 +0530 Subject: [PATCH] mgr/volumes: V2 Fix for test_subvolume_retain_snapshot_invalid_recreate Signed-off-by: Kotresh HR (cherry picked from commit ac791879096c8a9e5bda4eef69f1269eee819932) --- .../mgr/volumes/fs/operations/versions/subvolume_base.py | 8 ++++++-- .../mgr/volumes/fs/operations/versions/subvolume_v1.py | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) 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 6047516e4b8..bb4605cb16e 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 8c98b373622..107f1a46818 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): -- 2.47.3