Merge "Don't leave LBs in PENDING_DELETE after refusing to cascade"
This commit is contained in:
commit
29219e4345
|
@ -330,21 +330,22 @@ class LoadBalancersController(base.BaseController):
|
||||||
context = pecan.request.context.get('octavia_context')
|
context = pecan.request.context.get('octavia_context')
|
||||||
cascade = strutils.bool_from_string(cascade)
|
cascade = strutils.bool_from_string(cascade)
|
||||||
db_lb = self._get_db_lb(context.session, id)
|
db_lb = self._get_db_lb(context.session, id)
|
||||||
self._test_lb_status(context.session, id,
|
with db_api.get_lock_session() as lock_session:
|
||||||
lb_status=constants.PENDING_DELETE)
|
self._test_lb_status(lock_session, id,
|
||||||
if (db_lb.listeners or db_lb.pools) and not cascade:
|
lb_status=constants.PENDING_DELETE)
|
||||||
msg = _("Cannot delete Load Balancer %s - it has children") % id
|
if (db_lb.listeners or db_lb.pools) and not cascade:
|
||||||
LOG.warning(msg)
|
msg = _("Cannot delete Load Balancer %s - "
|
||||||
raise exceptions.ValidationException(detail=msg)
|
"it has children") % id
|
||||||
|
LOG.warning(msg)
|
||||||
|
raise exceptions.ValidationException(detail=msg)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
LOG.info("Sending deleted Load Balancer %s to the handler",
|
LOG.info("Sending deleted Load Balancer %s to the handler", id)
|
||||||
db_lb.id)
|
|
||||||
self.handler.delete(db_lb, cascade)
|
self.handler.delete(db_lb, cascade)
|
||||||
except Exception:
|
except Exception:
|
||||||
with excutils.save_and_reraise_exception(reraise=False):
|
with excutils.save_and_reraise_exception(reraise=False):
|
||||||
self.repositories.load_balancer.update(
|
self.repositories.load_balancer.update(
|
||||||
context.session, db_lb.id,
|
context.session, id,
|
||||||
provisioning_status=constants.ERROR)
|
provisioning_status=constants.ERROR)
|
||||||
result = self._convert_db_to_type(db_lb, lb_types.LoadBalancerResponse)
|
result = self._convert_db_to_type(db_lb, lb_types.LoadBalancerResponse)
|
||||||
return lb_types.LoadBalancersRootResponse(loadbalancer=result)
|
return lb_types.LoadBalancersRootResponse(loadbalancer=result)
|
||||||
|
|
|
@ -594,6 +594,7 @@ class TestLoadBalancer(base.BaseAPITest):
|
||||||
constants.LB_ALGORITHM_ROUND_ROBIN)
|
constants.LB_ALGORITHM_ROUND_ROBIN)
|
||||||
self.set_lb_status(lb_id)
|
self.set_lb_status(lb_id)
|
||||||
self.delete(self.LB_PATH.format(lb_id=lb_id), status=400)
|
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):
|
def test_delete_fails_with_listener(self):
|
||||||
project_id = uuidutils.generate_uuid()
|
project_id = uuidutils.generate_uuid()
|
||||||
|
@ -606,6 +607,7 @@ class TestLoadBalancer(base.BaseAPITest):
|
||||||
self.create_listener(constants.PROTOCOL_HTTP, 80, lb_id)
|
self.create_listener(constants.PROTOCOL_HTTP, 80, lb_id)
|
||||||
self.set_lb_status(lb_id)
|
self.set_lb_status(lb_id)
|
||||||
self.delete(self.LB_PATH.format(lb_id=lb_id), status=400)
|
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):
|
def test_cascade_delete(self):
|
||||||
project_id = uuidutils.generate_uuid()
|
project_id = uuidutils.generate_uuid()
|
||||||
|
|
Loading…
Reference in New Issue