Merge "Fix race condition in bay_update"
This commit is contained in:
commit
860d3e3fac
@ -164,7 +164,6 @@ class Handler(object):
|
||||
raise exception.InvalidParameterValue(err=(
|
||||
"cannot change bay property(ies) %s." % ", ".join(delta)))
|
||||
|
||||
bay.save()
|
||||
return bay
|
||||
|
||||
def bay_delete(self, context, uuid):
|
||||
@ -232,11 +231,13 @@ class HeatPoller(object):
|
||||
|
||||
self.bay.status = stack.stack_status
|
||||
self.bay.status_reason = stack.stack_status_reason
|
||||
self.bay.node_count = stack.parameters['number_of_minions']
|
||||
self.bay.save()
|
||||
raise loopingcall.LoopingCallDone()
|
||||
elif stack.stack_status != self.bay.status:
|
||||
self.bay.status = stack.stack_status
|
||||
self.bay.status_reason = stack.stack_status_reason
|
||||
self.bay.node_count = stack.parameters['number_of_minions']
|
||||
self.bay.save()
|
||||
if stack.stack_status == bay_status.CREATE_FAILED:
|
||||
LOG.error(_LE('Unable to create bay, stack_id: %(stack_id)s, '
|
||||
|
@ -558,12 +558,31 @@ class TestBayConductorWithK8s(base.TestCase):
|
||||
self.assertRaises(loopingcall.LoopingCallDone, poller.poll_and_check)
|
||||
self.assertEqual(poller.attempts, 2)
|
||||
|
||||
@patch('magnum.conductor.handlers.bay_conductor._update_stack_outputs')
|
||||
def test_poll_done_by_update(self, mock_update_stack_outputs):
|
||||
mock_heat_stack, bay, poller = self.setup_poll_test()
|
||||
|
||||
mock_heat_stack.stack_status = bay_status.UPDATE_COMPLETE
|
||||
mock_heat_stack.parameters = {'number_of_minions': 2}
|
||||
self.assertRaises(loopingcall.LoopingCallDone, poller.poll_and_check)
|
||||
|
||||
self.assertEqual(bay.save.call_count, 1)
|
||||
self.assertEqual(bay.status, bay_status.UPDATE_COMPLETE)
|
||||
self.assertEqual(bay.node_count, 2)
|
||||
self.assertEqual(poller.attempts, 1)
|
||||
|
||||
def test_poll_done_by_update_failed(self):
|
||||
mock_heat_stack, bay, poller = self.setup_poll_test()
|
||||
|
||||
mock_heat_stack.stack_status = bay_status.UPDATE_FAILED
|
||||
mock_heat_stack.parameters = {'number_of_minions': 2}
|
||||
self.assertRaises(loopingcall.LoopingCallDone, poller.poll_and_check)
|
||||
|
||||
self.assertEqual(bay.save.call_count, 1)
|
||||
self.assertEqual(bay.status, bay_status.UPDATE_FAILED)
|
||||
self.assertEqual(bay.node_count, 2)
|
||||
self.assertEqual(poller.attempts, 1)
|
||||
|
||||
def test_poll_destroy(self):
|
||||
mock_heat_stack, bay, poller = self.setup_poll_test()
|
||||
|
||||
@ -670,6 +689,10 @@ class TestHandler(db_base.DbTestCase):
|
||||
self, mock_openstack_client_class,
|
||||
mock_update_stack, mock_poll_and_check,
|
||||
mock_scale_manager):
|
||||
def side_effect(*args, **kwargs):
|
||||
self.bay.node_count = 2
|
||||
self.bay.save()
|
||||
mock_poll_and_check.side_effect = side_effect
|
||||
mock_heat_stack = mock.MagicMock()
|
||||
mock_heat_stack.stack_status = bay_status.CREATE_COMPLETE
|
||||
mock_heat_client = mock.MagicMock()
|
||||
@ -692,6 +715,10 @@ class TestHandler(db_base.DbTestCase):
|
||||
def test_update_node_count_failure(
|
||||
self, mock_openstack_client_class,
|
||||
mock_update_stack, mock_poll_and_check):
|
||||
def side_effect(*args, **kwargs):
|
||||
self.bay.node_count = 2
|
||||
self.bay.save()
|
||||
mock_poll_and_check.side_effect = side_effect
|
||||
mock_heat_stack = mock.MagicMock()
|
||||
mock_heat_stack.stack_status = bay_status.CREATE_FAILED
|
||||
mock_heat_client = mock.MagicMock()
|
||||
|
Loading…
x
Reference in New Issue
Block a user