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: v17.2.7~81^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=144405bca789dd142a007e7008d6fd82e5f79a79;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 572e26815c00..4af4283604f3 100644 --- a/src/pybind/mgr/snap_schedule/module.py +++ b/src/pybind/mgr/snap_schedule/module.py @@ -72,6 +72,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}]', '' @@ -93,6 +95,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: Dict[str, str] = {} @@ -136,6 +140,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') @@ -153,10 +159,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') @@ -176,10 +184,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') @@ -199,10 +209,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') @@ -220,10 +232,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') @@ -241,8 +255,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), ''