Revert "Adds Cascade option for load balancer drivers"

This reverts commit 06482f2ef8.

Change-Id: I4a4c9c165ceb3d86f3ac3fbd4bda44e3da41a2a5
This commit is contained in:
Armando Migliaccio 2016-03-02 23:02:20 +00:00
parent 3d0535f376
commit e8fc26573b
8 changed files with 22 additions and 164 deletions

View File

@ -236,27 +236,13 @@ class LoadBalancerPluginDbv2(base_db.CommonDbMixin,
lb_db.update(loadbalancer)
return data_models.LoadBalancer.from_sqlalchemy_model(lb_db)
def delete_loadbalancer(self, context, id, delete_vip_port=True,
cascade=False):
def delete_loadbalancer(self, context, id, delete_vip_port=True):
with context.session.begin(subtransactions=True):
if cascade:
lb = self.get_loadbalancer(context, id)
for pool in lb.pools:
if pool.healthmonitor_id:
self.delete_healthmonitor(
context, pool.healthmonitor_id)
self.delete_pool(context, pool.id)
for listener in lb.listeners:
# todo (xgerman): delete L7
self.delete_listener(context, listener.id)
lb_db = self._get_resource(context, models.LoadBalancer, id)
context.session.delete(lb_db)
if delete_vip_port and lb_db.vip_port:
self._core_plugin.delete_port(context, lb_db.vip_port_id)
def delete_loadbalancer_cascade(self, context, id, delete_vip_port=True):
self.delete_loadbalancer(context, id, delete_vip_port, cascade=True)
def prevent_lbaasv2_port_deletion(self, context, port_id):
try:
port_db = self._core_plugin._get_port(context, port_id)

View File

@ -175,21 +175,6 @@ class LoadBalancerManager(driver_base.BaseLoadBalancerManager):
self.driver.agent_rpc.delete_loadbalancer(context, loadbalancer,
agent['host'])
def delete_cascade(self, context, loadbalancer):
if not self.deletes_cascade:
raise NotImplementedError()
super(LoadBalancerManager, self).delete(context, loadbalancer)
agent = self.driver.get_loadbalancer_agent(context, loadbalancer.id)
# TODO(blogan): Rethink deleting from the database here. May want to
# wait until the agent actually deletes it. Doing this now to keep
# what v1 had.
self.driver.plugin.db.delete_loadbalancer_cascade(context,
loadbalancer.id)
if agent:
self.driver.agent_rpc.delete_loadbalancer(context, loadbalancer,
agent['host'])
def stats(self, context, loadbalancer):
pass

View File

@ -92,11 +92,6 @@ class BaseLoadBalancerManager(driver_mixins.BaseRefreshMixin,
"""Does this driver need to allocate its own virtual IPs"""
return False
@property
def deletes_cascade(self):
"""Does this driver cascade delete LB"""
return False
def create_and_allocate_vip(self, context, obj):
"""Create the load balancer and allocate a VIP
@ -110,13 +105,7 @@ class BaseLoadBalancerManager(driver_mixins.BaseRefreshMixin,
@property
def db_delete_method(self):
if self.deletes_cascade:
return self.driver.plugin.db.delete_loadbalancer_cascade
else:
return self.driver.plugin.db.delete_loadbalancer
def delete_cascade(self, context, obj):
raise NotImplementedError()
return self.driver.plugin.db.delete_loadbalancer
class BaseListenerManager(driver_mixins.BaseManagerMixin):

View File

@ -64,11 +64,6 @@ class LoggingNoopLoadBalancerManager(LoggingNoopCommonManager,
LOG.debug('allocates_vip queried')
return False
@property
def deletes_cascade(self):
LOG.debug('deletes_cascade queried')
return False
def create_and_allocate_vip(self, context, obj):
LOG.debug("LB %s no-op, create_and_allocate_vip %s",
self.__class__.__name__, obj.id)
@ -90,16 +85,6 @@ class LoggingNoopLoadBalancerManager(LoggingNoopCommonManager,
"total_connections": 0
}
@driver_base.driver_op
def delete(self, context, obj):
LOG.debug("LB %s no-op, delete %s", self.__class__.__name__,
obj.id)
@driver_base.driver_op
def delete_cascade(self, context, obj):
LOG.debug("LB %s no-op, delete cascade %s", self.__class__.__name__,
obj.id)
class LoggingNoopListenerManager(LoggingNoopCommonManager,
driver_base.BaseListenerManager):

View File

@ -1,52 +0,0 @@
# Copyright 2014 OpenStack Foundation.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from neutron.api import extensions
from neutron_lbaas.extensions import loadbalancerv2
class Cascade_delete(extensions.ExtensionDescriptor):
@classmethod
def get_name(cls):
return "LoadBalancing Cascade Delete"
@classmethod
def get_alias(cls):
return "n-lbaasv2-cascade-delete"
@classmethod
def get_description(cls):
return "Extension for LoadBalancing service v2 Cascade Delete"
@classmethod
def get_namespace(cls):
return "http://wiki.openstack.org/neutron/LBaaS/API_2.0"
@classmethod
def get_updated(cls):
return "2016-01-18T10:00:00-00:00"
@classmethod
def get_resources(cls):
return []
@classmethod
def get_plugin_interface(cls):
return loadbalancerv2.LoadBalancerPluginBaseV2
def get_extended_resources(self, version):
return {}

View File

@ -386,8 +386,7 @@ class LoadBalancerPluginv2(loadbalancerv2.LoadBalancerPluginBaseV2):
"shared_pools",
"l7",
"lbaas_agent_schedulerv2",
"service-type",
"n-lbaasv2-cascade-delete"]
"service-type"]
path_prefix = loadbalancerv2.LOADBALANCERV2_PREFIX
agent_notifiers = (
@ -489,8 +488,6 @@ class LoadBalancerPluginv2(loadbalancerv2.LoadBalancerPluginBaseV2):
except (lbaas_agentschedulerv2.NoEligibleLbaasAgent,
lbaas_agentschedulerv2.NoActiveLbaasAgent) as no_agent:
raise no_agent
except NotImplementedError as e:
raise e
except Exception:
LOG.exception(_LE("There was an error in the driver"))
self._handle_driver_error(context, db_entity)
@ -606,28 +603,22 @@ class LoadBalancerPluginv2(loadbalancerv2.LoadBalancerPluginBaseV2):
def delete_loadbalancer(self, context, id):
old_lb = self.db.get_loadbalancer(context, id)
if old_lb.listeners:
raise loadbalancerv2.EntityInUse(
entity_using=models.Listener.NAME,
id=old_lb.listeners[0].id,
entity_in_use=models.LoadBalancer.NAME)
if old_lb.pools:
raise loadbalancerv2.EntityInUse(
entity_using=models.PoolV2.NAME,
id=old_lb.pools[0].id,
entity_in_use=models.LoadBalancer.NAME)
self.db.test_and_set_status(context, models.LoadBalancer, id,
constants.PENDING_DELETE)
driver = self._get_driver_for_provider(old_lb.provider.provider_name)
db_lb = self.db.get_loadbalancer(context, id)
try:
self._call_driver_operation(
context, driver.load_balancer.delete_cascade, db_lb)
except NotImplementedError:
if old_lb.listeners:
raise loadbalancerv2.EntityInUse(
entity_using=models.Listener.NAME,
id=old_lb.listeners[0].id,
entity_in_use=models.LoadBalancer.NAME)
if old_lb.pools:
raise loadbalancerv2.EntityInUse(
entity_using=models.PoolV2.NAME,
id=old_lb.pools[0].id,
entity_in_use=models.LoadBalancer.NAME)
#driver does not support cascade
self._call_driver_operation(
context, driver.load_balancer.delete, db_lb)
self._call_driver_operation(
context, driver.load_balancer.delete, db_lb)
def get_loadbalancer(self, context, id, fields=None):
return self.db.get_loadbalancer(context, id).to_api_dict()

View File

@ -642,7 +642,7 @@ class LbaasPluginDbTestCase(LbaasTestMixin, base.NeutronDbPluginV2TestCase):
hm_status['provisioning_status'])
class TestLbaasLoadBalancerTests(LbaasPluginDbTestCase):
class LbaasLoadBalancerTests(LbaasPluginDbTestCase):
def test_create_loadbalancer(self, **extras):
expected = {
@ -718,16 +718,16 @@ class TestLbaasLoadBalancerTests(LbaasPluginDbTestCase):
resp = self._delete_loadbalancer_api(loadbalancer_id)
self.assertEqual(webob.exc.HTTPNoContent.code, resp.status_int)
def test_delete_loadbalancer_when_loadbalancer_in_use_cascade(self):
def test_delete_loadbalancer_when_loadbalancer_in_use(self):
with self.subnet() as subnet:
with self.loadbalancer(
subnet=subnet, no_delete=True) as loadbalancer:
with self.loadbalancer(subnet=subnet) as loadbalancer:
lb_id = loadbalancer['loadbalancer']['id']
with self.listener(loadbalancer_id=lb_id, no_delete=True):
with self.listener(loadbalancer_id=lb_id):
ctx = context.get_admin_context()
self.plugin.delete_loadbalancer(
self.assertRaises(loadbalancerv2.EntityInUse,
self.plugin.delete_loadbalancer,
ctx, lb_id)
# lb deleted
self._validate_statuses(lb_id)
def test_show_loadbalancer(self):
name = 'lb_show'
@ -945,24 +945,6 @@ class LoadBalancerDelegateVIPCreation(LbaasPluginDbTestCase):
self.assertIsNotNone(port)
class LoadBalancerDeleteCascade(LbaasPluginDbTestCase):
def setUp(self):
driver_patcher = mock.patch.object(
noop_driver.LoggingNoopLoadBalancerManager,
'deletes_cascade', new_callable=mock.PropertyMock)
driver_patcher.start().return_value = True
super(LoadBalancerDeleteCascade, self).setUp()
def test_delete_loadbalancer(self):
with self.subnet() as subnet:
with self.loadbalancer(subnet=subnet, no_delete=True) as lb:
lb_id = lb['loadbalancer']['id']
acontext = context.get_admin_context()
self.plugin.db.delete_loadbalancer(
acontext, lb_id, delete_vip_port=True)
class ListenerTestBase(LbaasPluginDbTestCase):
def setUp(self):
super(ListenerTestBase, self).setUp()

View File

@ -125,14 +125,6 @@ class LoadBalancerManagerTest(ManagerTestWithUpdates):
h = self.manager.stats(self.parent.context, model)
self.parent.assertEqual(dummy_stats, h)
@patch_manager
def delete(self, model):
self.manager.delete(self.parent.context, model)
@patch_manager
def delete_cascade(self, model):
self.manager.delete_cascade(self.parent.context, model)
class TestLoggingNoopLoadBalancerDriver(
test_db_loadbalancer.LoadBalancerPluginDbTestCase):