Convergence: Fix to persist stack status in DB

Due to recent code changes stack is marked complete/failed when
releasing the lock. But in case of convergence, stack lock is not
used.

Hence in case of convergence we need to still persist stack status
when state_set is called.

Change-Id: Ibe8c59a69e8dc8be3f0d15af238e166c852ab675
Closes-Bug: #1503296
This commit is contained in:
Rakesh H S 2015-10-06 19:56:28 +05:30
parent 0f2359549c
commit 3a02fdcb25
2 changed files with 19 additions and 0 deletions

View File

@ -717,6 +717,11 @@ class Stack(collections.Mapping):
self.status = status
self.status_reason = reason
if cfg.CONF.convergence_engine:
# for convergence stack lock is not used, hence persist state
self._persist_state()
return
# Persist state to db only if status == IN_PROGRESS
# or action == self.DELETE/self.ROLLBACK. Else, it would
# be done before releasing the stack lock.

View File

@ -14,8 +14,10 @@
# limitations under the License.
import mock
from oslo_config import cfg
from heat.common import exception
from heat.engine import dependencies
from heat.engine import resource
from heat.engine import scheduler
from heat.engine import stack
@ -580,6 +582,18 @@ class MiscMethodsTest(common.HeatTestCase):
True)
self.assertFalse(mock_sync.called)
@mock.patch.object(dependencies.Dependencies, 'roots')
@mock.patch.object(stack.Stack, '_persist_state')
def test_check_stack_complete_persist_called(self, mock_persist_state,
mock_dep_roots):
cfg.CONF.set_default('convergence_engine', True)
mock_dep_roots.return_value = [(1, True)]
worker.check_stack_complete(
self.ctx, self.stack, self.stack.current_traversal,
1, self.stack.convergence_dependencies,
True)
self.assertTrue(mock_persist_state.called)
@mock.patch.object(sync_point, 'sync')
def test_propagate_check_resource(self, mock_sync):
worker.propagate_check_resource(