Fix possible state machine hole in failover

Change-Id: I5c68791c48b0f6766439560bca1cb6b0e61360be
This commit is contained in:
Adam Harwell 2018-11-07 12:14:07 -08:00
parent 5bd7cc7cb4
commit f552a30038
2 changed files with 10 additions and 0 deletions

View File

@ -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)

View File

@ -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')