Fix load balancers with failed amphora failover
There was a bug in the load balancer failover code for the amphora v1 driver where if there were multiple failed amphora, with session persistence, could cause a load balancer failover to not complete. Change-Id: Ia46a05ab9fdc97ed9be699e5b2ae90daca3ab9a2 Story: 2008099 Task: 40802
This commit is contained in:
parent
418ea0908c
commit
77dc23fc26
@ -56,6 +56,9 @@ class AmpListenersUpdate(BaseAmphoraTask):
|
|||||||
# in a failover flow with both amps failing. Skip it and let
|
# in a failover flow with both amps failing. Skip it and let
|
||||||
# health manager fix it.
|
# health manager fix it.
|
||||||
try:
|
try:
|
||||||
|
# Make sure we have a fresh load balancer object
|
||||||
|
loadbalancer = self.loadbalancer_repo.get(db_apis.get_session(),
|
||||||
|
id=loadbalancer.id)
|
||||||
self.amphora_driver.update_amphora_listeners(
|
self.amphora_driver.update_amphora_listeners(
|
||||||
loadbalancer, amphora, timeout_dict)
|
loadbalancer, amphora, timeout_dict)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@ -83,7 +83,9 @@ class TestAmphoraDriverTasks(base.TestCase):
|
|||||||
constants.CONN_RETRY_INTERVAL: 4}
|
constants.CONN_RETRY_INTERVAL: 4}
|
||||||
super().setUp()
|
super().setUp()
|
||||||
|
|
||||||
|
@mock.patch('octavia.db.repositories.LoadBalancerRepository.get')
|
||||||
def test_amp_listeners_update(self,
|
def test_amp_listeners_update(self,
|
||||||
|
mock_lb_repo_get,
|
||||||
mock_driver,
|
mock_driver,
|
||||||
mock_generate_uuid,
|
mock_generate_uuid,
|
||||||
mock_log,
|
mock_log,
|
||||||
@ -92,12 +94,13 @@ class TestAmphoraDriverTasks(base.TestCase):
|
|||||||
mock_listener_repo_update,
|
mock_listener_repo_update,
|
||||||
mock_amphora_repo_update):
|
mock_amphora_repo_update):
|
||||||
|
|
||||||
|
mock_lb_repo_get.return_value = _LB_mock
|
||||||
amp_list_update_obj = amphora_driver_tasks.AmpListenersUpdate()
|
amp_list_update_obj = amphora_driver_tasks.AmpListenersUpdate()
|
||||||
amp_list_update_obj.execute(_load_balancer_mock, _amphora_mock,
|
amp_list_update_obj.execute(_load_balancer_mock, _amphora_mock,
|
||||||
self.timeout_dict)
|
self.timeout_dict)
|
||||||
|
|
||||||
mock_driver.update_amphora_listeners.assert_called_once_with(
|
mock_driver.update_amphora_listeners.assert_called_once_with(
|
||||||
_load_balancer_mock, _amphora_mock, self.timeout_dict)
|
_LB_mock, _amphora_mock, self.timeout_dict)
|
||||||
|
|
||||||
mock_driver.update_amphora_listeners.side_effect = Exception('boom')
|
mock_driver.update_amphora_listeners.side_effect = Exception('boom')
|
||||||
|
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
Fixed an issue that could cause load balancers, with multiple amphora
|
||||||
|
in a failed state, to be unable to complete a failover.
|
Loading…
Reference in New Issue
Block a user