From 550b52fe50d7b8feb1b058ee72ffe252a4d4b1a4 Mon Sep 17 00:00:00 2001 From: Patrick Donnelly Date: Wed, 5 Aug 2020 10:50:03 -0700 Subject: [PATCH] qa: log entrance/exit into the volumes plugin Fixes: https://tracker.ceph.com/issues/46851 Signed-off-by: Patrick Donnelly (cherry picked from commit a89b1633e1940d8bd35baaa46ce894fb46670cd5) Conflicts: src/pybind/mgr/volumes/module.py --- src/pybind/mgr/volumes/module.py | 51 ++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/pybind/mgr/volumes/module.py b/src/pybind/mgr/volumes/module.py index 4f8331ee5b634..f7ebb533925a4 100644 --- a/src/pybind/mgr/volumes/module.py +++ b/src/pybind/mgr/volumes/module.py @@ -1,11 +1,37 @@ import errno import json +import logging +import traceback from mgr_module import MgrModule import orchestrator from .fs.volume import VolumeClient +log = logging.getLogger(__name__) + +class VolumesInfoWrapper(): + def __init__(self, f, context): + self.f = f + self.context = context + def __enter__(self): + log.info("Starting {}".format(self.context)) + def __exit__(self, exc_type, exc_value, tb): + if exc_type is not None: + log.error("Failed {}:\n{}".format(self.context, "".join(traceback.format_exception(exc_type, exc_value, tb)))) + else: + log.info("Finishing {}".format(self.context)) + +def mgr_cmd_wrap(f): + def wrap(self, inbuf, cmd): + astr = [] + for k in cmd: + astr.append("{}:{}".format(k, cmd[k])) + context = "{}({}) < \"{}\"".format(f.__name__, ", ".join(astr), inbuf) + with VolumesInfoWrapper(f, context): + return f(self, inbuf, cmd) + return wrap + class Module(orchestrator.OrchestratorClientMixin, MgrModule): COMMANDS = [ { @@ -269,18 +295,22 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule): return handler(inbuf, cmd) + @mgr_cmd_wrap def _cmd_fs_volume_create(self, inbuf, cmd): vol_id = cmd['name'] return self.vc.create_fs_volume(vol_id) + @mgr_cmd_wrap def _cmd_fs_volume_rm(self, inbuf, cmd): vol_name = cmd['vol_name'] confirm = cmd.get('yes-i-really-mean-it', None) return self.vc.delete_fs_volume(vol_name, confirm) + @mgr_cmd_wrap def _cmd_fs_volume_ls(self, inbuf, cmd): return self.vc.list_fs_volumes() + @mgr_cmd_wrap def _cmd_fs_subvolumegroup_create(self, inbuf, cmd): """ :return: a 3-tuple of return code(int), empty string(str), error message (str) @@ -290,6 +320,7 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule): pool_layout=cmd.get('pool_layout', None), mode=cmd.get('mode', '755'), uid=cmd.get('uid', None), gid=cmd.get('gid', None)) + @mgr_cmd_wrap def _cmd_fs_subvolumegroup_rm(self, inbuf, cmd): """ :return: a 3-tuple of return code(int), empty string(str), error message (str) @@ -298,9 +329,11 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule): group_name=cmd['group_name'], force=cmd.get('force', False)) + @mgr_cmd_wrap def _cmd_fs_subvolumegroup_ls(self, inbuf, cmd): return self.vc.list_subvolume_groups(vol_name=cmd['vol_name']) + @mgr_cmd_wrap def _cmd_fs_subvolume_create(self, inbuf, cmd): """ :return: a 3-tuple of return code(int), empty string(str), error message (str) @@ -315,6 +348,7 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule): mode=cmd.get('mode', '755'), namespace_isolated=cmd.get('namespace_isolated', False)) + @mgr_cmd_wrap def _cmd_fs_subvolume_rm(self, inbuf, cmd): """ :return: a 3-tuple of return code(int), empty string(str), error message (str) @@ -324,45 +358,54 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule): group_name=cmd.get('group_name', None), force=cmd.get('force', False)) + @mgr_cmd_wrap def _cmd_fs_subvolume_ls(self, inbuf, cmd): return self.vc.list_subvolumes(vol_name=cmd['vol_name'], group_name=cmd.get('group_name', None)) + @mgr_cmd_wrap def _cmd_fs_subvolumegroup_getpath(self, inbuf, cmd): return self.vc.getpath_subvolume_group( vol_name=cmd['vol_name'], group_name=cmd['group_name']) + @mgr_cmd_wrap def _cmd_fs_subvolume_getpath(self, inbuf, cmd): return self.vc.subvolume_getpath(vol_name=cmd['vol_name'], sub_name=cmd['sub_name'], group_name=cmd.get('group_name', None)) + @mgr_cmd_wrap def _cmd_fs_subvolume_info(self, inbuf, cmd): return self.vc.subvolume_info(vol_name=cmd['vol_name'], sub_name=cmd['sub_name'], group_name=cmd.get('group_name', None)) + @mgr_cmd_wrap def _cmd_fs_subvolumegroup_snapshot_create(self, inbuf, cmd): return self.vc.create_subvolume_group_snapshot(vol_name=cmd['vol_name'], group_name=cmd['group_name'], snap_name=cmd['snap_name']) + @mgr_cmd_wrap def _cmd_fs_subvolumegroup_snapshot_rm(self, inbuf, cmd): return self.vc.remove_subvolume_group_snapshot(vol_name=cmd['vol_name'], group_name=cmd['group_name'], snap_name=cmd['snap_name'], force=cmd.get('force', False)) + @mgr_cmd_wrap def _cmd_fs_subvolumegroup_snapshot_ls(self, inbuf, cmd): return self.vc.list_subvolume_group_snapshots(vol_name=cmd['vol_name'], group_name=cmd['group_name']) + @mgr_cmd_wrap def _cmd_fs_subvolume_snapshot_create(self, inbuf, cmd): return self.vc.create_subvolume_snapshot(vol_name=cmd['vol_name'], sub_name=cmd['sub_name'], snap_name=cmd['snap_name'], group_name=cmd.get('group_name', None)) + @mgr_cmd_wrap def _cmd_fs_subvolume_snapshot_rm(self, inbuf, cmd): return self.vc.remove_subvolume_snapshot(vol_name=cmd['vol_name'], sub_name=cmd['sub_name'], @@ -370,40 +413,48 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule): group_name=cmd.get('group_name', None), force=cmd.get('force', False)) + @mgr_cmd_wrap def _cmd_fs_subvolume_snapshot_info(self, inbuf, cmd): return self.vc.subvolume_snapshot_info(vol_name=cmd['vol_name'], sub_name=cmd['sub_name'], snap_name=cmd['snap_name'], group_name=cmd.get('group_name', None)) + @mgr_cmd_wrap def _cmd_fs_subvolume_snapshot_ls(self, inbuf, cmd): return self.vc.list_subvolume_snapshots(vol_name=cmd['vol_name'], sub_name=cmd['sub_name'], group_name=cmd.get('group_name', None)) + @mgr_cmd_wrap def _cmd_fs_subvolume_resize(self, inbuf, cmd): return self.vc.resize_subvolume(vol_name=cmd['vol_name'], sub_name=cmd['sub_name'], new_size=cmd['new_size'], group_name=cmd.get('group_name', None), no_shrink=cmd.get('no_shrink', False)) + @mgr_cmd_wrap def _cmd_fs_subvolume_snapshot_protect(self, inbuf, cmd): return self.vc.protect_subvolume_snapshot(vol_name=cmd['vol_name'], sub_name=cmd['sub_name'], snap_name=cmd['snap_name'], group_name=cmd.get('group_name', None)) + @mgr_cmd_wrap def _cmd_fs_subvolume_snapshot_unprotect(self, inbuf, cmd): return self.vc.unprotect_subvolume_snapshot(vol_name=cmd['vol_name'], sub_name=cmd['sub_name'], snap_name=cmd['snap_name'], group_name=cmd.get('group_name', None)) + @mgr_cmd_wrap def _cmd_fs_subvolume_snapshot_clone(self, inbuf, cmd): return self.vc.clone_subvolume_snapshot( vol_name=cmd['vol_name'], sub_name=cmd['sub_name'], snap_name=cmd['snap_name'], group_name=cmd.get('group_name', None), pool_layout=cmd.get('pool_layout', None), target_sub_name=cmd['target_sub_name'], target_group_name=cmd.get('target_group_name', None)) + @mgr_cmd_wrap def _cmd_fs_clone_status(self, inbuf, cmd): return self.vc.clone_status( vol_name=cmd['vol_name'], clone_name=cmd['clone_name'], group_name=cmd.get('group_name', None)) + @mgr_cmd_wrap def _cmd_fs_clone_cancel(self, inbuf, cmd): return self.vc.clone_cancel( vol_name=cmd['vol_name'], clone_name=cmd['clone_name'], group_name=cmd.get('group_name', None)) -- 2.39.5