Release stack lock when successfully acquire
Should not to release the stack lock if acquire failed, such as stack action in progress. Change-Id: I2a519c47306065b0a3412a8c6faa64006dea691f Closes-Bug: #1418360
This commit is contained in:
parent
5d47a413a8
commit
00c5993195
@ -132,6 +132,8 @@ class StackLock(object):
|
||||
try:
|
||||
self.acquire()
|
||||
yield
|
||||
except exception.ActionInProgress:
|
||||
raise
|
||||
except: # noqa
|
||||
with excutils.save_and_reraise_exception():
|
||||
self.release(stack_id)
|
||||
|
@ -145,7 +145,7 @@ class StackLockTest(common.HeatTestCase):
|
||||
self.assertRaises(exception.ActionInProgress, slock.acquire)
|
||||
self.m.VerifyAll()
|
||||
|
||||
def test_thread_lock_context_mgr_exception(self):
|
||||
def test_thread_lock_context_mgr_exception_acquire_success(self):
|
||||
db_api.stack_lock_create = mock.Mock(return_value=None)
|
||||
db_api.stack_lock_release = mock.Mock(return_value=None)
|
||||
slock = stack_lock.StackLock(self.context, self.stack, self.engine_id)
|
||||
@ -157,6 +157,18 @@ class StackLockTest(common.HeatTestCase):
|
||||
self.assertRaises(self.TestThreadLockException, check_thread_lock)
|
||||
self.assertEqual(1, db_api.stack_lock_release.call_count)
|
||||
|
||||
def test_thread_lock_context_mgr_exception_acquire_fail(self):
|
||||
db_api.stack_lock_create = mock.Mock(return_value=self.engine_id)
|
||||
db_api.stack_lock_release = mock.Mock()
|
||||
slock = stack_lock.StackLock(self.context, self.stack, self.engine_id)
|
||||
|
||||
def check_thread_lock():
|
||||
with slock.thread_lock(self.stack.id):
|
||||
self.assertEqual(1, db_api.stack_lock_create.call_count)
|
||||
raise exception.ActionInProgress
|
||||
self.assertRaises(exception.ActionInProgress, check_thread_lock)
|
||||
assert not db_api.stack_lock_release.called
|
||||
|
||||
def test_thread_lock_context_mgr_no_exception(self):
|
||||
db_api.stack_lock_create = mock.Mock(return_value=None)
|
||||
db_api.stack_lock_release = mock.Mock(return_value=None)
|
||||
|
Loading…
Reference in New Issue
Block a user