diff options
author | huangtianhua <huangtianhua@huawei.com> | 2015-12-02 16:02:41 +0800 |
---|---|---|
committer | huangtianhua <huangtianhua@huawei.com> | 2015-12-04 16:58:21 +0800 |
commit | 5f8c16887455b6228ca8eec4a600c06c696fb334 (patch) | |
tree | 1d819b8a4ad1db84ce76da772be7ce431edc53c7 | |
parent | f1081b678ea8f93630a3f628197814a80b01dfc6 (diff) | |
download | heat-5f8c16887455b6228ca8eec4a600c06c696fb334.tar.gz |
Correct reset_state_on_error() handling
The change Ic948c2fe5baf23c9c4ced33060f672ca9c278a19 aim
to prevent the stacks hanging in IN_PROGRESS, but the code
is incorrect, this patch fix them.
Closes-Bug: #1521881
Related-Bug: #1492433
(cherry picked from commit 63141b20bcb5fe0b7941a6d8578936e42c485242)
Conflicts:
heat/tests/test_stack.py
Change-Id: I0e9655b5a931452d810c38b7ddf6a2ce742bb7ed
-rwxr-xr-x | heat/engine/stack.py | 9 | ||||
-rw-r--r-- | heat/tests/test_stack.py | 23 |
2 files changed, 16 insertions, 16 deletions
diff --git a/heat/engine/stack.py b/heat/engine/stack.py index 81e6865d2..225dbbdee 100755 --- a/heat/engine/stack.py +++ b/heat/engine/stack.py @@ -75,9 +75,11 @@ def reset_state_on_error(func): LOG.error(_LE('Unexpected exception in %(func)s: %(msg)s'), {'func': func.__name__, 'msg': errmsg}) finally: - if stack.state == stack.IN_PROGRESS: - stack.set_state(stack.action, stack.FAILED, errmsg) - assert errmsg is not None, "Returned while IN_PROGRESS" + if stack.status == stack.IN_PROGRESS: + msg = _("Unexpected returning while IN_PROGRESS.") + stack.state_set(stack.action, stack.FAILED, + errmsg if errmsg is not None else msg) + assert errmsg is not None, "Returned while IN_PROGRESS." return handle_exceptions @@ -1273,7 +1275,6 @@ class Stack(collections.Mapping): sus_task(timeout=self.timeout_secs()) @profiler.trace('Stack.delete_snapshot', hide_args=False) - @reset_state_on_error def delete_snapshot(self, snapshot): '''Remove a snapshot from the backends.''' for name, rsrc in six.iteritems(self.resources): diff --git a/heat/tests/test_stack.py b/heat/tests/test_stack.py index 1b2c0ff2c..ec9534a95 100644 --- a/heat/tests/test_stack.py +++ b/heat/tests/test_stack.py @@ -1871,16 +1871,19 @@ class ResetStateOnErrorTest(common.HeatTestCase): (COMPLETE, IN_PROGRESS, FAILED) = range(3) action = 'something' - state = COMPLETE + status = COMPLETE + + def __init__(self): + self.state_set = mock.MagicMock() @stack.reset_state_on_error def raise_exception(self): - self.state = self.IN_PROGRESS + self.status = self.IN_PROGRESS raise ValueError('oops') @stack.reset_state_on_error def raise_exit_exception(self): - self.state = self.IN_PROGRESS + self.status = self.IN_PROGRESS raise BaseException('bye') @stack.reset_state_on_error @@ -1889,35 +1892,31 @@ class ResetStateOnErrorTest(common.HeatTestCase): @stack.reset_state_on_error def fail(self): - self.state = self.FAILED + self.status = self.FAILED return 'Hello world' def test_success(self): dummy = self.DummyStack() - dummy.set_state = mock.MagicMock() self.assertEqual('Hello world', dummy.succeed()) - self.assertFalse(dummy.set_state.called) + self.assertFalse(dummy.state_set.called) def test_failure(self): dummy = self.DummyStack() - dummy.set_state = mock.MagicMock() self.assertEqual('Hello world', dummy.fail()) - self.assertFalse(dummy.set_state.called) + self.assertFalse(dummy.state_set.called) def test_reset_state_exception(self): dummy = self.DummyStack() - dummy.set_state = mock.MagicMock() exc = self.assertRaises(ValueError, dummy.raise_exception) self.assertIn('oops', str(exc)) - self.assertTrue(dummy.set_state.called) + self.assertTrue(dummy.state_set.called) def test_reset_state_exit_exception(self): dummy = self.DummyStack() - dummy.set_state = mock.MagicMock() exc = self.assertRaises(BaseException, dummy.raise_exit_exception) self.assertIn('bye', str(exc)) - self.assertTrue(dummy.set_state.called) + self.assertTrue(dummy.state_set.called) |