Fix stack lock ActionInProgress in the admin case

When the engine starts and tries to reset the status of stacks in
progress, it tries to acquire the stack lock on them. The stack lock
queries the database to retrieve the name of the stack, but does a
tenant-scope query, thus fails when as we use the admin context during
startup. This fixes it by passing tenant_safe=False.

Change-Id: I4393fdb601eedb36d7288afd57fb5a1c96af7216
Closes-Bug: #1516712
This commit is contained in:
Thomas Herve 2015-11-16 20:45:25 +01:00 committed by Steve Baker
parent c349747945
commit 9924d780e8
2 changed files with 23 additions and 2 deletions

View File

@ -69,6 +69,7 @@ class StackLock(object):
return
stack = stack_object.Stack.get_by_id(self.context, self.stack_id,
tenant_safe=False,
show_deleted=True)
if (lock_engine_id == self.engine_id or
self.engine_alive(self.context, lock_engine_id)):

View File

@ -31,8 +31,8 @@ class StackLockTest(common.HeatTestCase):
stack.id = self.stack_id
stack.name = "test_stack"
stack.action = "CREATE"
self.patchobject(stack_object.Stack, 'get_by_id',
return_value=stack)
self.mock_get_by_id = self.patchobject(
stack_object.Stack, 'get_by_id', return_value=stack)
class TestThreadLockException(Exception):
pass
@ -57,6 +57,11 @@ class StackLockTest(common.HeatTestCase):
self.engine_id)
self.assertRaises(exception.ActionInProgress, slock.acquire)
self.mock_get_by_id.assert_called_once_with(
self.context,
self.stack_id,
tenant_safe=False,
show_deleted=True)
mock_create.assert_called_once_with(self.stack_id, self.engine_id)
def test_successful_acquire_existing_lock_engine_dead(self):
@ -85,6 +90,11 @@ class StackLockTest(common.HeatTestCase):
self.engine_id)
self.patchobject(slock, 'engine_alive', return_value=True)
self.assertRaises(exception.ActionInProgress, slock.acquire)
self.mock_get_by_id.assert_called_once_with(
self.context,
self.stack_id,
tenant_safe=False,
show_deleted=True)
mock_create.assert_called_once_with(self.stack_id, self.engine_id)
@ -100,6 +110,11 @@ class StackLockTest(common.HeatTestCase):
self.engine_id)
self.patchobject(slock, 'engine_alive', return_value=False)
self.assertRaises(exception.ActionInProgress, slock.acquire)
self.mock_get_by_id.assert_called_once_with(
self.context,
self.stack_id,
tenant_safe=False,
show_deleted=True)
mock_create.assert_called_once_with(self.stack_id, self.engine_id)
mock_steal.assert_called_once_with(self.stack_id, 'fake-engine-id',
@ -135,6 +150,11 @@ class StackLockTest(common.HeatTestCase):
self.engine_id)
self.patchobject(slock, 'engine_alive', return_value=False)
self.assertRaises(exception.ActionInProgress, slock.acquire)
self.mock_get_by_id.assert_called_with(
self.context,
self.stack_id,
tenant_safe=False,
show_deleted=True)
mock_create.assert_has_calls(
[mock.call(self.stack_id, self.engine_id)] * 2)