Merge "Update state sequence for failed flows"

This commit is contained in:
Jenkins
2013-10-07 19:58:02 +00:00
committed by Gerrit Code Review
3 changed files with 16 additions and 9 deletions

View File

@@ -26,6 +26,7 @@ from taskflow.engines import base
from taskflow import decorators
from taskflow import exceptions as exc
from taskflow.openstack.common import excutils
from taskflow import states
from taskflow import storage as t_storage
@@ -50,15 +51,20 @@ class ActionEngine(base.EngineBase):
self.notifier = misc.TransitionNotifier()
self.task_notifier = misc.TransitionNotifier()
def _revert(self, current_failure):
def _revert(self, current_failure=None):
self._change_state(states.REVERTING)
state = self._root.revert(self)
try:
state = self._root.revert(self)
except Exception:
with excutils.save_and_reraise_exception():
self._change_state(states.FAILURE)
self._change_state(state)
if state == states.SUSPENDED:
return
self._change_state(states.FAILURE)
misc.Failure.reraise_if_any(self._failures)
current_failure.reraise()
if current_failure:
current_failure.reraise()
def _reset(self):
self._failures = []
@@ -82,7 +88,7 @@ class ActionEngine(base.EngineBase):
raise exc.MissingDependencies(self._flow, sorted(missing))
self._run()
elif self._failures:
self._revert(self._failures[-1])
self._revert()
else:
self._run()
@@ -91,6 +97,7 @@ class ActionEngine(base.EngineBase):
try:
state = self._root.execute(self)
except Exception:
self._change_state(states.FAILURE)
self._revert(misc.Failure())
else:
self._change_state(state)

View File

@@ -199,13 +199,13 @@ class EngineTaskTest(EngineTestBase):
['flow RUNNING',
'fail RUNNING',
'fail FAILURE',
'flow FAILURE',
'flow REVERTING',
'fail REVERTING',
'fail reverted(Failure: exceptions.RuntimeError: Woot!)',
'fail REVERTED',
'fail PENDING',
'flow REVERTED',
'flow FAILURE'])
'flow REVERTED'])
def test_invalid_flow_raises(self):
value = 'i am string, not task/flow, sorry'
@@ -638,7 +638,7 @@ class SuspendFlowTest(EngineTestBase):
'b reverted(5)'])
with self.assertRaisesRegexp(RuntimeError, '^Woot'):
engine.run()
self.assertEquals(engine.storage.get_flow_state(), states.FAILURE)
self.assertEquals(engine.storage.get_flow_state(), states.REVERTED)
self.assertEquals(
self.values,
['a',

View File

@@ -89,9 +89,9 @@ class LinearFlowTest(test.TestCase):
expected_states = [
states.RUNNING,
states.FAILURE,
states.REVERTING,
states.REVERTED,
states.FAILURE,
]
self.assertEquals(expected_states, changes)
expected_states = [