]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/ssh: Port raising exceptions from completion handlers to Py2 31940/head
authorSebastian Wagner <sebastian.wagner@suse.com>
Mon, 2 Dec 2019 14:13:14 +0000 (15:13 +0100)
committerSebastian Wagner <sebastian.wagner@suse.com>
Mon, 2 Dec 2019 14:13:14 +0000 (15:13 +0100)
Signed-off-by: Sebastian Wagner <sebastian.wagner@suse.com>
src/pybind/mgr/ssh/module.py
src/pybind/mgr/ssh/tests/test_completion.py

index 92f0d9803024cb4a1439a918c875bd7d5fc7dac9..1b612882f2d0828f408c20dce2147edd27f6cadf 100644 (file)
@@ -107,24 +107,34 @@ class AsyncCompletion(orchestrator.Completion):
         def error_callback(e):
             self.fail(e)
 
+        if six.PY3:
+            _callback = self.__on_complete
+        else:
+            def _callback(*args, **kwargs):
+                # Py2 only: _worker_pool doesn't call error_callback
+                try:
+                    return self.__on_complete(*args, **kwargs)
+                except Exception as e:
+                    self.fail(e)
+
         def run(value):
             if self.many:
                 if not value:
                     logger.info('calling map_async without values')
                     callback([])
                 if six.PY3:
-                    SSHOrchestrator.instance._worker_pool.map_async(self.__on_complete, value,
+                    SSHOrchestrator.instance._worker_pool.map_async(_callback, value,
                                                                     callback=callback,
                                                                     error_callback=error_callback)
                 else:
-                    SSHOrchestrator.instance._worker_pool.map_async(self.__on_complete, value,
+                    SSHOrchestrator.instance._worker_pool.map_async(_callback, value,
                                                                     callback=callback)
             else:
                 if six.PY3:
-                    SSHOrchestrator.instance._worker_pool.apply_async(self.__on_complete, (value,),
+                    SSHOrchestrator.instance._worker_pool.apply_async(_callback, (value,),
                                                                       callback=callback, error_callback=error_callback)
                 else:
-                    SSHOrchestrator.instance._worker_pool.apply_async(self.__on_complete, (value,),
+                    SSHOrchestrator.instance._worker_pool.apply_async(_callback, (value,),
                                                                       callback=callback)
             return self.ASYNC_RESULT
 
index f076de8f2870f8713308ec6cf44d24d02a41def9..988f56455f7b06c8f012a09803e4734e64b02315 100644 (file)
@@ -160,7 +160,6 @@ class TestCompletion(object):
         self._wait(ssh_module, c)
         assert c.result == "['2', '3']"
 
-    @pytest.mark.skipif(sys.version_info < (3,0), reason="requires python3")
     def test_raise(self, ssh_module):
         @async_completion
         def run(x):