]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/orchestrator: Raise more expressive Error, if completion already finished
authorSebastian Wagner <sebastian.wagner@suse.com>
Mon, 16 Dec 2019 10:01:42 +0000 (11:01 +0100)
committerSebastian Wagner <sebastian.wagner@suse.com>
Mon, 16 Dec 2019 10:01:42 +0000 (11:01 +0100)
Eases debugging of tracebacks.

Signed-off-by: Sebastian Wagner <sebastian.wagner@suse.com>
src/pybind/mgr/orchestrator.py
src/pybind/mgr/tests/test_orchestrator.py

index 27d3b8f3d35bf831d00f1ae179e68a702cafe25b..ab61c4e297e0ac9976ee7219959579127126d151 100644 (file)
@@ -318,6 +318,9 @@ class _Promise(object):
         Sets the whole completion to be faild with this exception and end the
         evaluation.
         """
+        if self._state == self.FINISHED:
+            raise ValueError(
+                'Invalid State: called fail, but Completion is already finished: {}'.format(str(e)))
         assert self._state in (self.INITIALIZED, self.RUNNING)
         logger.exception('_Promise failed')
         self._exception = e
index 584c407cb4cfc964db8f763aedaea63dada94d24..4dd9db76cd9813081fc32c364507c46c56dd0726 100644 (file)
@@ -228,6 +228,11 @@ def test_fail():
     c._first_promise.fail(KeyError())
     assert isinstance(c.exception, KeyError)
 
+    with pytest.raises(ValueError,
+                  match='Invalid State: called fail, but Completion is already finished: {}'.format(
+                      str(ZeroDivisionError()))):
+        c._first_promise.fail(ZeroDivisionError())
+
 
 def test_pretty_print():
     mgr = mock.MagicMock()