Merge "Fix LB failover when in ERROR"

This commit is contained in:
Zuul 2019-03-12 23:44:08 +00:00 committed by Gerrit Code Review
commit 12668dec63
3 changed files with 17 additions and 2 deletions

View File

@ -106,6 +106,16 @@ class LoadBalancersController(base.BaseController):
raise exceptions.LBPendingStateError(
state=prov_status, id=id)
def _test_and_set_failover_prov_status(self, session, id):
lb_repo = self.repositories.load_balancer
if not lb_repo.set_status_for_failover(session, id,
constants.PENDING_UPDATE):
prov_status = lb_repo.get(session, id=id).provisioning_status
LOG.info("Invalid state %(state)s of loadbalancer resource %(id)s",
{"state": prov_status, "id": id})
raise exceptions.LBPendingStateError(
state=prov_status, id=id)
@staticmethod
def _validate_network_and_fill_or_validate_subnet(load_balancer):
network = validate.network_exists_optionally_contains_subnet(
@ -719,7 +729,7 @@ class FailoverController(LoadBalancersController):
driver = driver_factory.get_driver(db_lb.provider)
with db_api.get_lock_session() as lock_session:
self._test_lb_status(lock_session, self.lb_id)
self._test_and_set_failover_prov_status(lock_session, self.lb_id)
LOG.info("Sending failover request for load balancer %s to the "
"provider %s", self.lb_id, driver.name)
driver_utils.call_provider(

View File

@ -1955,7 +1955,7 @@ class TestLoadBalancer(base.BaseAPITest):
status=constants.ERROR)
self.app.put(self._get_full_path(
self.LB_PATH.format(lb_id=lb_dict.get('id')) + "/failover"),
status=409)
status=202)
def test_failover_not_authorized(self):
project_id = uuidutils.generate_uuid()

View File

@ -0,0 +1,5 @@
---
fixes:
- |
Fix load balancers that could not be failed over when in ERROR provisioning
status.