]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/orch: Properly handle NotImplementedError
authorSebastian Wagner <sebastian.wagner@suse.com>
Thu, 12 Mar 2020 11:58:49 +0000 (12:58 +0100)
committerSebastian Wagner <sebastian.wagner@suse.com>
Thu, 12 Mar 2020 13:15:07 +0000 (14:15 +0100)
They are masked as RuntimeError by the mgr.

Fixes: https://tracker.ceph.com/issues/44569
Signed-off-by: Sebastian Wagner <sebastian.wagner@suse.com>
src/pybind/mgr/orchestrator/_interface.py

index 4330951a5a34ea5bf363c9580f2438dd3759bae9..95c1da85348b2a2d3c5bf8ed705e1fd1adcf82b6 100644 (file)
@@ -744,7 +744,6 @@ class Orchestrator(object):
                     }
         return features
 
-    @_hide_in_features
     def cancel_completions(self):
         # type: () -> None
         """
@@ -1542,7 +1541,15 @@ class OrchestratorClientMixin(Orchestrator):
             raise NoOrchestrator()
 
         mgr.log.debug("_oremote {} -> {}.{}(*{}, **{})".format(mgr.module_name, o, meth, args, kwargs))
-        return mgr.remote(o, meth, *args, **kwargs)
+        try:
+            return mgr.remote(o, meth, *args, **kwargs)
+        except Exception as e:
+            if meth == 'get_feature_set':
+                raise  # self.get_feature_set() calls self._oremote()
+            f_set = self.get_feature_set()
+            if meth not in f_set or not f_set[meth]['available']:
+                raise NotImplementedError(f'{o} does not implement {meth}') from e
+            raise
 
     def _orchestrator_wait(self, completions):
         # type: (List[Completion]) -> None