Merge "Don't leave LBs in PENDING_DELETE after refusing to cascade"

This commit is contained in:
Jenkins 2017-06-01 19:28:31 +00:00 committed by Gerrit Code Review
commit 29219e4345
2 changed files with 12 additions and 9 deletions

View File

@ -330,21 +330,22 @@ class LoadBalancersController(base.BaseController):
context = pecan.request.context.get('octavia_context')
cascade = strutils.bool_from_string(cascade)
db_lb = self._get_db_lb(context.session, id)
self._test_lb_status(context.session, id,
lb_status=constants.PENDING_DELETE)
if (db_lb.listeners or db_lb.pools) and not cascade:
msg = _("Cannot delete Load Balancer %s - it has children") % id
LOG.warning(msg)
raise exceptions.ValidationException(detail=msg)
with db_api.get_lock_session() as lock_session:
self._test_lb_status(lock_session, id,
lb_status=constants.PENDING_DELETE)
if (db_lb.listeners or db_lb.pools) and not cascade:
msg = _("Cannot delete Load Balancer %s - "
"it has children") % id
LOG.warning(msg)
raise exceptions.ValidationException(detail=msg)
try:
LOG.info("Sending deleted Load Balancer %s to the handler",
db_lb.id)
LOG.info("Sending deleted Load Balancer %s to the handler", id)
self.handler.delete(db_lb, cascade)
except Exception:
with excutils.save_and_reraise_exception(reraise=False):
self.repositories.load_balancer.update(
context.session, db_lb.id,
context.session, id,
provisioning_status=constants.ERROR)
result = self._convert_db_to_type(db_lb, lb_types.LoadBalancerResponse)
return lb_types.LoadBalancersRootResponse(loadbalancer=result)

View File

@ -594,6 +594,7 @@ class TestLoadBalancer(base.BaseAPITest):
constants.LB_ALGORITHM_ROUND_ROBIN)
self.set_lb_status(lb_id)
self.delete(self.LB_PATH.format(lb_id=lb_id), status=400)
self.assert_correct_status(lb_id=lb_id)
def test_delete_fails_with_listener(self):
project_id = uuidutils.generate_uuid()
@ -606,6 +607,7 @@ class TestLoadBalancer(base.BaseAPITest):
self.create_listener(constants.PROTOCOL_HTTP, 80, lb_id)
self.set_lb_status(lb_id)
self.delete(self.LB_PATH.format(lb_id=lb_id), status=400)
self.assert_correct_status(lb_id=lb_id)
def test_cascade_delete(self):
project_id = uuidutils.generate_uuid()