]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/volumes: V2 Fix for test_subvolume_retain_snapshot_invalid_recreate
authorKotresh HR <khiremat@redhat.com>
Thu, 9 Jun 2022 08:00:59 +0000 (13:30 +0530)
committerDavid Galloway <dgallowa@redhat.com>
Thu, 21 Jul 2022 16:26:38 +0000 (12:26 -0400)
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit ac791879096c8a9e5bda4eef69f1269eee819932)

src/pybind/mgr/volumes/fs/operations/versions/subvolume_base.py
src/pybind/mgr/volumes/fs/operations/versions/subvolume_v1.py

index 6047516e4b8dbc68beebe282586859805a89796b..bb4605cb16e73b7a6e0b8134b46932f1820427fc 100644 (file)
@@ -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:
index 8c98b3736222faf3e2681b8aafbf701383764887..107f1a46818636e9974fa63d559cc64d47c7878d 100644 (file)
@@ -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):