From 1ce5c58df8d06497243b78e8a26754509a4ab980 Mon Sep 17 00:00:00 2001 From: Kotresh HR Date: Thu, 16 Dec 2021 14:11:54 +0530 Subject: [PATCH] mgr/volumes: Add subvolumegroup info cmd Resolves: rhbz#2033545 Fixes: https://tracker.ceph.com/issues/53509 Signed-off-by: Kotresh HR (cherry picked from commit 9e1b7ed39e25f28fdfc66b394d1f3ee61c7ce0ba) --- src/pybind/mgr/volumes/fs/operations/group.py | 28 +++++++++++++++++++ src/pybind/mgr/volumes/fs/volume.py | 21 ++++++++++++++ src/pybind/mgr/volumes/module.py | 12 ++++++++ 3 files changed, 61 insertions(+) diff --git a/src/pybind/mgr/volumes/fs/operations/group.py b/src/pybind/mgr/volumes/fs/operations/group.py index 1409c3e83676d..283a6d2f19d0d 100644 --- a/src/pybind/mgr/volumes/fs/operations/group.py +++ b/src/pybind/mgr/volumes/fs/operations/group.py @@ -88,6 +88,34 @@ class Group(GroupTemplate): return [] raise + def info(self): + st = self.fs.statx(self.path, cephfs.CEPH_STATX_BTIME | cephfs.CEPH_STATX_SIZE + | cephfs.CEPH_STATX_UID | cephfs.CEPH_STATX_GID | cephfs.CEPH_STATX_MODE + | cephfs.CEPH_STATX_ATIME | cephfs.CEPH_STATX_MTIME | cephfs.CEPH_STATX_CTIME, + cephfs.AT_SYMLINK_NOFOLLOW) + usedbytes = st["size"] + try: + nsize = int(self.fs.getxattr(self.path, 'ceph.quota.max_bytes').decode('utf-8')) + except cephfs.NoData: + nsize = 0 + + try: + data_pool = self.fs.getxattr(self.path, 'ceph.dir.layout.pool').decode('utf-8') + except cephfs.Error as e: + raise VolumeException(-e.args[0], e.args[1]) + + return {'uid': int(st["uid"]), + 'gid': int(st["gid"]), + 'atime': str(st["atime"]), + 'mtime': str(st["mtime"]), + 'ctime': str(st["ctime"]), + 'mode': int(st["mode"]), + 'data_pool': data_pool, + 'created_at': str(st["btime"]), + 'bytes_quota': "infinite" if nsize == 0 else nsize, + 'bytes_used': int(usedbytes), + 'bytes_pcent': "undefined" if nsize == 0 else '{0:.2f}'.format((float(usedbytes) / nsize) * 100.0)} + def set_group_attrs(fs, path, attrs): # set subvolume group attrs # set size diff --git a/src/pybind/mgr/volumes/fs/volume.py b/src/pybind/mgr/volumes/fs/volume.py index 7ba9c6bd9d511..69be9d1c22b2d 100644 --- a/src/pybind/mgr/volumes/fs/volume.py +++ b/src/pybind/mgr/volumes/fs/volume.py @@ -783,6 +783,27 @@ class VolumeClient(CephfsClient["Module"]): ret = self.volume_exception_to_retval(ve) return ret + def subvolumegroup_info(self, **kwargs): + ret = None + volname = kwargs['vol_name'] + groupname = kwargs['group_name'] + + try: + with open_volume(self, volname) as fs_handle: + with open_group(fs_handle, self.volspec, groupname) as group: + mon_addr_lst = [] + mon_map_mons = self.mgr.get('mon_map')['mons'] + for mon in mon_map_mons: + ip_port = mon['addr'].split("/")[0] + mon_addr_lst.append(ip_port) + + group_info_dict = group.info() + group_info_dict["mon_addrs"] = mon_addr_lst + ret = 0, json.dumps(group_info_dict, indent=4, sort_keys=True), "" + except VolumeException as ve: + ret = self.volume_exception_to_retval(ve) + return ret + def getpath_subvolume_group(self, **kwargs): volname = kwargs['vol_name'] groupname = kwargs['group_name'] diff --git a/src/pybind/mgr/volumes/module.py b/src/pybind/mgr/volumes/module.py index aeec5ed3e60eb..5cc6ba091ad81 100644 --- a/src/pybind/mgr/volumes/module.py +++ b/src/pybind/mgr/volumes/module.py @@ -95,6 +95,13 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule): 'desc': "Delete a CephFS subvolume group in a volume", 'perm': 'rw' }, + { + 'cmd': 'fs subvolumegroup info ' + 'name=vol_name,type=CephString ' + 'name=group_name,type=CephString ', + 'desc': "Get the metadata of a CephFS subvolume group in a volume, ", + 'perm': 'r' + }, { 'cmd': 'fs subvolume ls ' 'name=vol_name,type=CephString ' @@ -536,6 +543,11 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule): group_name=cmd['group_name'], force=cmd.get('force', False)) + @mgr_cmd_wrap + def _cmd_fs_subvolumegroup_info(self, inbuf, cmd): + return self.vc.subvolumegroup_info(vol_name=cmd['vol_name'], + group_name=cmd['group_name']) + @mgr_cmd_wrap def _cmd_fs_subvolumegroup_ls(self, inbuf, cmd): return self.vc.list_subvolume_groups(vol_name=cmd['vol_name']) -- 2.39.5