From f1b34d1d80d52d4ee7358047f60e1babbe2d6044 Mon Sep 17 00:00:00 2001 From: Dhairya Parmar Date: Wed, 17 Jan 2024 18:12:50 +0530 Subject: [PATCH] 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) (cherry picked from commit e99486edc59b2df9e7c31504d0b4d45539a49f0b) --- .../mgr/dashboard/controllers/cephfs.py | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/pybind/mgr/dashboard/controllers/cephfs.py b/src/pybind/mgr/dashboard/controllers/cephfs.py index fcd87833f85..f753f9caec4 100644 --- a/src/pybind/mgr/dashboard/controllers/cephfs.py +++ b/src/pybind/mgr/dashboard/controllers/cephfs.py @@ -129,10 +129,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): @@ -375,17 +382,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, @@ -633,11 +646,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 -- 2.47.3