]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/volumes: interface for fetching cloned subvolume status
authorVenky Shankar <vshankar@redhat.com>
Mon, 2 Dec 2019 08:10:36 +0000 (03:10 -0500)
committerVenky Shankar <vshankar@redhat.com>
Fri, 31 Jan 2020 10:09:14 +0000 (05:09 -0500)
Signed-off-by: Venky Shankar <vshankar@redhat.com>
src/pybind/mgr/volumes/fs/operations/template.py
src/pybind/mgr/volumes/fs/operations/versions/subvolume_v1.py

index fa903b793696d0e77a429751a9166b19869848f9..7c3d60882b64213d2831a39016668dafa98131e5 100644 (file)
@@ -41,6 +41,9 @@ class SubvolumeTemplate(object):
     def open(self, need_complete=True, expected_types=[]):
         raise VolumeException(-errno.ENOTSUP, "operation not supported.")
 
+    def status(self):
+        raise VolumeException(-errno.ENOTSUP, "operation not supported.")
+
     def create(self, size, isolate_nspace, pool, mode, uid, gid):
         """
         set up metadata, pools and auth for a subvolume.
index c767727ab854f14dac0cb2be586508579256f833..f1e83863ee8b5823fc1e8ff39146f05f188f1cd8 100644 (file)
@@ -138,6 +138,36 @@ class SubvolumeV1(SubvolumeBase, SubvolumeTemplate):
         except cephfs.Error as e:
             raise VolumeException(-e.args[0], e.args[1])
 
+    def _get_clone_source(self):
+        try:
+            clone_source = {
+                'volume'   : self.metadata_mgr.get_option("source", "volume"),
+                'subvolume': self.metadata_mgr.get_option("source", "subvolume"),
+                'snapshot' : self.metadata_mgr.get_option("source", "snapshot"),
+            }
+
+            try:
+                clone_source["group"] = self.metadata_mgr.get_option("source", "group")
+            except MetadataMgrException as me:
+                if me.errno == -errno.ENOENT:
+                    pass
+                else:
+                    raise
+        except MetadataMgrException as me:
+            raise VolumeException(-errno.EINVAL, "error fetching subvolume metadata")
+        return clone_source
+
+    @property
+    def status(self):
+        state = self.metadata_mgr.get_global_option(MetadataManager.GLOBAL_META_KEY_STATE)
+        subvolume_type = self.metadata_mgr.get_global_option(MetadataManager.GLOBAL_META_KEY_TYPE)
+        subvolume_status = {
+            'state' : state
+        }
+        if not OpSm.is_final_state(state) and subvolume_type == SubvolumeBase.SUBVOLUME_TYPE_CLONE:
+            subvolume_status["source"] = self._get_clone_source()
+        return subvolume_status
+
     def remove(self):
         self.trash_base_dir()