]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/snap_schedule: add debug log for missing or wrong path
authorMilind Changire <mchangir@redhat.com>
Tue, 29 Nov 2022 07:54:27 +0000 (13:24 +0530)
committerMilind Changire <mchangir@redhat.com>
Fri, 24 Feb 2023 01:08:24 +0000 (06:38 +0530)
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 <mchangir@redhat.com>
src/pybind/mgr/snap_schedule/fs/schedule_client.py

index 1fc3217ec7d266188a1866b95709eadeb6ced133..fae4491bdd9e798a7ebb8445e86d861f310736dc 100644 (file)
@@ -276,6 +276,7 @@ class SnapSchedClient(CephfsClient):
                                   start: str,
                                   repeat: str) -> None:
         log.debug(f'Scheduled snapshot of {path} triggered')
+        set_schedule_to_inactive = False
         try:
             with self.get_schedule_db(fs_name) as conn_mgr:
                 db = conn_mgr.dbinfo.db
@@ -294,13 +295,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')
-                    sched.set_inactive(db)
                 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:
             with self.get_schedule_db(fs_name) as conn_mgr:
                 db = conn_mgr.dbinfo.db