From: Dhairya Parmar Date: Wed, 17 Jan 2024 12:42:50 +0000 (+0530) Subject: mgr/dashboard: allow sending back error status code fetching clients fails X-Git-Tag: v20.0.0~2526^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e99486edc59b2df9e7c31504d0b4d45539a49f0b;p=ceph.git mgr/dashboard: allow sending back error status code fetching clients fails Fixes: https://tracker.ceph.com/issues/64089 Signed-off-by: Dhairya Parmar (cherry picked from commit 564dba38c49864e71958ddcd970856b834e9c6b7) --- diff --git a/src/pybind/mgr/dashboard/controllers/cephfs.py b/src/pybind/mgr/dashboard/controllers/cephfs.py index 86f112522c8f..fca5ddc95ee1 100644 --- a/src/pybind/mgr/dashboard/controllers/cephfs.py +++ b/src/pybind/mgr/dashboard/controllers/cephfs.py @@ -105,10 +105,17 @@ class CephFS(RESTController): return self.fs_status(fs_id) @RESTController.Resource('GET') - def clients(self, fs_id): + def clients(self, fs_id, **kwargs): + flag = kwargs.pop('suppress_client_ls_errors', 'True') + if flag not in ('True', 'False'): + raise DashboardException(msg='suppress_client_ls_errors value ' + 'needs to be either True or False ' + f'but provided {flag}', + component='cephfs') + fs_id = self.fs_id_to_int(fs_id) - return self._clients(fs_id) + return self._clients(fs_id, suppress_client_ls_errors=flag) @RESTController.Resource('DELETE', path='/client/{client_id}') def evict(self, fs_id, client_id): @@ -351,17 +358,23 @@ class CephFS(RESTController): "versions": mds_versions } - def _clients(self, fs_id): + def _clients(self, fs_id, **kwargs): + suppress_get_errors = kwargs.pop('suppress_client_ls_errors', 'True') cephfs_clients = self.cephfs_clients.get(fs_id, None) if cephfs_clients is None: cephfs_clients = CephFSClients(mgr, fs_id) self.cephfs_clients[fs_id] = cephfs_clients try: - status, clients = cephfs_clients.get() + status, clients = cephfs_clients.get(suppress_get_errors) except AttributeError: raise cherrypy.HTTPError(404, "No cephfs with id {0}".format(fs_id)) + except RuntimeError: + raise cherrypy.HTTPError(500, + f"Could not fetch client(s), maybe there " + f"is no active MDS on CephFS {fs_id} or " + "the FS is in failed state.") if clients is None: raise cherrypy.HTTPError(404, @@ -609,11 +622,14 @@ class CephFSClients(object): self.fscid = fscid @ViewCache() - def get(self): + def get(self, suppress_errors='True'): try: ret = CephService.send_command('mds', 'session ls', srv_spec='{0}:0'.format(self.fscid)) except RuntimeError: - ret = [] + if suppress_errors == 'True': + ret = [] + else: + raise return ret