From ecef0eed1e25d04ce5794be197d6e9564717cf7c Mon Sep 17 00:00:00 2001 From: Milind Changire Date: Wed, 26 Apr 2023 12:34:10 +0530 Subject: [PATCH] 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) --- src/pybind/mgr/snap_schedule/module.py | 36 +++++++++++++++++++------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/src/pybind/mgr/snap_schedule/module.py b/src/pybind/mgr/snap_schedule/module.py index 93770f350363b..94876506e7f4f 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), '' -- 2.39.5