Fix possible state machine hole in failover
Change-Id: I5c68791c48b0f6766439560bca1cb6b0e61360be
This commit is contained in:
parent
5bd7cc7cb4
commit
f552a30038
|
@ -867,6 +867,12 @@ class ControllerWorker(base_taskflow.BaseTaskFlowEngine):
|
|||
db_apis.get_session(), amp.load_balancer_id,
|
||||
provisioning_status=constants.ACTIVE)
|
||||
except Exception as e:
|
||||
try:
|
||||
self._lb_repo.update(
|
||||
db_apis.get_session(), amp.load_balancer_id,
|
||||
provisioning_status=constants.ERROR)
|
||||
except Exception:
|
||||
LOG.error("Unable to revert LB status to ERROR.")
|
||||
with excutils.save_and_reraise_exception():
|
||||
LOG.error("Failover exception: %s", e)
|
||||
|
||||
|
|
|
@ -1197,7 +1197,9 @@ class TestControllerWorker(base.TestCase):
|
|||
|
||||
@mock.patch('octavia.controller.worker.controller_worker.ControllerWorker.'
|
||||
'_perform_amphora_failover')
|
||||
@mock.patch('octavia.db.repositories.LoadBalancerRepository.update')
|
||||
def test_failover_amp_flow_exception(self,
|
||||
mock_update,
|
||||
mock_perform_amp_failover,
|
||||
mock_api_get_session,
|
||||
mock_dyn_log_listener,
|
||||
|
@ -1214,6 +1216,8 @@ class TestControllerWorker(base.TestCase):
|
|||
mock_perform_amp_failover.side_effect = TestException('boom')
|
||||
cw = controller_worker.ControllerWorker()
|
||||
self.assertRaises(TestException, cw.failover_amphora, AMP_ID)
|
||||
mock_update.assert_called_with(_db_session, LB_ID,
|
||||
provisioning_status=constants.ERROR)
|
||||
|
||||
@mock.patch('octavia.controller.worker.controller_worker.ControllerWorker.'
|
||||
'_perform_amphora_failover')
|
||||
|
|
Loading…
Reference in New Issue