From: Milind Changire Date: Wed, 26 Apr 2023 07:04:10 +0000 (+0530) Subject: mgr/snap_schedule: catch all exceptions for cli X-Git-Tag: v16.2.14~6^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F52753%2Fhead;p=ceph.git mgr/snap_schedule: catch all exceptions for cli Any unknown exception causes the module to be unloaded and unresponsive. So, it'll be ideal to catch all exceptions during command-line interaction and report them instead of crashing with a traceback. Fixes: https://tracker.ceph.com/issues/58195 Signed-off-by: Milind Changire (cherry picked from commit 651fb2e3b515c80e9dc4a24638c9d1a0d487c729) --- diff --git a/src/pybind/mgr/snap_schedule/module.py b/src/pybind/mgr/snap_schedule/module.py index 93770f350363..94876506e7f4 100644 --- a/src/pybind/mgr/snap_schedule/module.py +++ b/src/pybind/mgr/snap_schedule/module.py @@ -70,6 +70,8 @@ class Module(MgrModule): ret_scheds = self.client.get_snap_schedules(use_fs, path) except CephfsConnectionException as e: return e.to_tuple() + except Exception as e: + return -errno.EIO, '', str(e) if format == 'json': json_report = ','.join([ret_sched.report_json() for ret_sched in ret_scheds]) return 0, f'[{json_report}]', '' @@ -90,6 +92,8 @@ class Module(MgrModule): self.log.debug(f'recursive is {recursive}') except CephfsConnectionException as e: return e.to_tuple() + except Exception as e: + return -errno.EIO, '', str(e) if not scheds: if format == 'json': output = {} # type: Dict[str,str] @@ -133,6 +137,8 @@ class Module(MgrModule): return -errno.ENOENT, '', str(e) except CephfsConnectionException as e: return e.to_tuple() + except Exception as e: + return -errno.EIO, '', str(e) return 0, suc_msg, '' @CLIWriteCommand('fs snap-schedule remove') @@ -150,10 +156,12 @@ class Module(MgrModule): return -errno.EINVAL, '', f"no such filesystem: {use_fs}" abs_path = path self.client.rm_snap_schedule(use_fs, abs_path, repeat, start) - except CephfsConnectionException as e: - return e.to_tuple() except ValueError as e: return -errno.ENOENT, '', str(e) + except CephfsConnectionException as e: + return e.to_tuple() + except Exception as e: + return -errno.EIO, '', str(e) return 0, 'Schedule removed for path {}'.format(path), '' @CLIWriteCommand('fs snap-schedule retention add') @@ -173,10 +181,12 @@ class Module(MgrModule): self.client.add_retention_spec(use_fs, abs_path, retention_spec_or_period, retention_count) - except CephfsConnectionException as e: - return e.to_tuple() except ValueError as e: return -errno.ENOENT, '', str(e) + except CephfsConnectionException as e: + return e.to_tuple() + except Exception as e: + return -errno.EIO, '', str(e) return 0, 'Retention added to path {}'.format(path), '' @CLIWriteCommand('fs snap-schedule retention remove') @@ -196,10 +206,12 @@ class Module(MgrModule): self.client.rm_retention_spec(use_fs, abs_path, retention_spec_or_period, retention_count) - except CephfsConnectionException as e: - return e.to_tuple() except ValueError as e: return -errno.ENOENT, '', str(e) + except CephfsConnectionException as e: + return e.to_tuple() + except Exception as e: + return -errno.EIO, '', str(e) return 0, 'Retention removed from path {}'.format(path), '' @CLIWriteCommand('fs snap-schedule activate') @@ -217,10 +229,12 @@ class Module(MgrModule): return -errno.EINVAL, '', f"no such filesystem: {use_fs}" abs_path = path self.client.activate_snap_schedule(use_fs, abs_path, repeat, start) - except CephfsConnectionException as e: - return e.to_tuple() except ValueError as e: return -errno.ENOENT, '', str(e) + except CephfsConnectionException as e: + return e.to_tuple() + except Exception as e: + return -errno.EIO, '', str(e) return 0, 'Schedule activated for path {}'.format(path), '' @CLIWriteCommand('fs snap-schedule deactivate') @@ -238,8 +252,10 @@ class Module(MgrModule): return -errno.EINVAL, '', f"no such filesystem: {use_fs}" abs_path = path self.client.deactivate_snap_schedule(use_fs, abs_path, repeat, start) - except CephfsConnectionException as e: - return e.to_tuple() except ValueError as e: return -errno.ENOENT, '', str(e) + except CephfsConnectionException as e: + return e.to_tuple() + except Exception as e: + return -errno.EIO, '', str(e) return 0, 'Schedule deactivated for path {}'.format(path), ''