From: Milind Changire Date: Tue, 29 Nov 2022 07:54:27 +0000 (+0530) Subject: mgr/snap_schedule: add debug log for missing or wrong path X-Git-Tag: v16.2.14~59^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=103771d920c967caa57eb095d84f532306a97a25;p=ceph.git mgr/snap_schedule: add debug log for missing or wrong path Bad paths cause a Traceback to be dumped in the logs and unloads the module causing denial of service. Fixes: https://tracker.ceph.com/issues/58095 Signed-off-by: Milind Changire (cherry picked from commit c689548694a138cfc87c4ad8aa5ea67789da11bb) Conflicts: src/pybind/mgr/snap_schedule/fs/schedule_client.py - included minor code rearrangement to share db connection better between try/except/finally clauses --- diff --git a/src/pybind/mgr/snap_schedule/fs/schedule_client.py b/src/pybind/mgr/snap_schedule/fs/schedule_client.py index e1e5c8237e4..319e068d3f8 100644 --- a/src/pybind/mgr/snap_schedule/fs/schedule_client.py +++ b/src/pybind/mgr/snap_schedule/fs/schedule_client.py @@ -264,6 +264,7 @@ class SnapSchedClient(CephfsClient): def create_scheduled_snapshot(self, fs_name, path, retention, start, repeat): log.debug(f'Scheduled snapshot of {path} triggered') + set_schedule_to_inactive = False with self.get_schedule_db(fs_name) as conn_mgr: db = conn_mgr.dbinfo.db try: @@ -282,17 +283,22 @@ class SnapSchedClient(CephfsClient): log.info(f'created scheduled snapshot of {path}') log.debug(f'created scheduled snapshot {snap_name}') sched.update_last(time, db) + except cephfs.ObjectNotFound: + # maybe path is missing or wrong + self._log_exception('create_scheduled_snapshot') + log.debug(f'path {path} is probably missing or wrong; ' + 'remember to strip off the mount point path ' + 'prefix to provide the correct path') + set_schedule_to_inactive = True except cephfs.Error: - self._log_exception('create_scheduled_snapshot: ' - 'unexpected exception; ' - f'deactivating schedule fs:"{fs_name}" ' - f'path:"{path}" repeat:"{repeat}" ' - f'retention:"{retention}"') - sched.set_inactive(db) + self._log_exception('create_scheduled_snapshot') except Exception: # catch all exceptions cause otherwise we'll never know since this # is running in a thread self._log_exception('create_scheduled_snapshot') + finally: + if set_schedule_to_inactive: + sched.set_inactive(db) finally: self.refresh_snap_timers(fs_name, path, db) self.prune_snapshots(sched, db)