From: Oleg Bondarev Date: Fri, 19 Jul 2013 13:00:13 +0000 (+0400) Subject: LBaaS: add delete_health_monitor() to driver API X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=4bd7bea0dbb54b6ed287f21ab7a6d65b177f017c;p=openstack-build%2Fneutron-build.git LBaaS: add delete_health_monitor() to driver API Currently there is create_health_monitor() in the driver API so a driver may create an object on device but there is no delete_health_monitor() and monitor objects will remain on device forever. Driver should at least call plugin to delete a db object. Fixes bug 1198996 Change-Id: Idcdaea0636e01381064983d8de5bfe3936357fb9 --- diff --git a/neutron/services/loadbalancer/drivers/abstract_driver.py b/neutron/services/loadbalancer/drivers/abstract_driver.py index eaec09ac2..1be9f934f 100644 --- a/neutron/services/loadbalancer/drivers/abstract_driver.py +++ b/neutron/services/loadbalancer/drivers/abstract_driver.py @@ -120,6 +120,13 @@ class LoadBalancerAbstractDriver(object): pool_id): pass + @abc.abstractmethod + def delete_health_monitor(self, context, health_monitor): + """Driver may call the code below in order to delete the monitor. + self.plugin._delete_db_health_monitor(context, health_monitor["id"]) + """ + pass + @abc.abstractmethod def create_pool_health_monitor(self, context, health_monitor, diff --git a/neutron/services/loadbalancer/drivers/haproxy/plugin_driver.py b/neutron/services/loadbalancer/drivers/haproxy/plugin_driver.py index 85fb9de05..d50c6e28b 100644 --- a/neutron/services/loadbalancer/drivers/haproxy/plugin_driver.py +++ b/neutron/services/loadbalancer/drivers/haproxy/plugin_driver.py @@ -357,5 +357,8 @@ class HaproxyOnHostPluginDriver(abstract_driver.LoadBalancerAbstractDriver): def create_health_monitor(self, context, health_monitor): pass + def delete_health_monitor(self, context, health_monitor): + self.plugin._delete_db_health_monitor(context, health_monitor["id"]) + def stats(self, context, pool_id): pass diff --git a/neutron/services/loadbalancer/drivers/noop/noop_driver.py b/neutron/services/loadbalancer/drivers/noop/noop_driver.py index 3183c448a..01b65b657 100644 --- a/neutron/services/loadbalancer/drivers/noop/noop_driver.py +++ b/neutron/services/loadbalancer/drivers/noop/noop_driver.py @@ -89,6 +89,10 @@ class NoopLbaaSDriver(abstract_driver.LoadBalancerAbstractDriver): pool_association): pass + @log.log + def delete_health_monitor(self, context, health_monitor): + self.plugin._delete_db_health_monitor(context, health_monitor["id"]) + @log.log def create_pool_health_monitor(self, context, health_monitor, pool_id): diff --git a/neutron/services/loadbalancer/plugin.py b/neutron/services/loadbalancer/plugin.py index 9457ac3c1..11b9c4df3 100644 --- a/neutron/services/loadbalancer/plugin.py +++ b/neutron/services/loadbalancer/plugin.py @@ -185,6 +185,9 @@ class LoadBalancerPlugin(loadbalancer_db.LoadBalancerPluginDb, hm_id, pool_id) + def _delete_db_health_monitor(self, context, id): + super(LoadBalancerPlugin, self).delete_health_monitor(context, id) + def delete_health_monitor(self, context, id): with context.session.begin(subtransactions=True): hm = self.get_health_monitor(context, id) @@ -195,6 +198,7 @@ class LoadBalancerPlugin(loadbalancer_db.LoadBalancerPluginDb, self.driver.delete_pool_health_monitor(context, hm, assoc['pool_id']) + self.driver.delete_health_monitor(context, hm) def create_pool_health_monitor(self, context, health_monitor, pool_id): retval = super(LoadBalancerPlugin, self).create_pool_health_monitor( diff --git a/neutron/tests/unit/db/loadbalancer/test_db_loadbalancer.py b/neutron/tests/unit/db/loadbalancer/test_db_loadbalancer.py index 584569741..61a03c133 100644 --- a/neutron/tests/unit/db/loadbalancer/test_db_loadbalancer.py +++ b/neutron/tests/unit/db/loadbalancer/test_db_loadbalancer.py @@ -859,10 +859,18 @@ class TestLoadBalancer(LoadBalancerPluginDbTestCase): def test_delete_healthmonitor(self): with self.health_monitor(no_delete=True) as monitor: + ctx = context.get_admin_context() + qry = ctx.session.query(ldb.HealthMonitor) + qry = qry.filter_by(id=monitor['health_monitor']['id']) + self.assertIsNotNone(qry.first()) + req = self.new_delete_request('health_monitors', monitor['health_monitor']['id']) res = req.get_response(self.ext_api) self.assertEqual(res.status_int, 204) + qry = ctx.session.query(ldb.HealthMonitor) + qry = qry.filter_by(id=monitor['health_monitor']['id']) + self.assertIsNone(qry.first()) def test_delete_healthmonitor_cascade_deletion_of_associations(self): with self.health_monitor(type='HTTP', no_delete=True) as monitor: