]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
LBaaS: add delete_health_monitor() to driver API
authorOleg Bondarev <obondarev@mirantis.com>
Fri, 19 Jul 2013 13:00:13 +0000 (17:00 +0400)
committerGerrit Code Review <review@openstack.org>
Mon, 22 Jul 2013 13:45:06 +0000 (13:45 +0000)
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

neutron/services/loadbalancer/drivers/abstract_driver.py
neutron/services/loadbalancer/drivers/haproxy/plugin_driver.py
neutron/services/loadbalancer/drivers/noop/noop_driver.py
neutron/services/loadbalancer/plugin.py
neutron/tests/unit/db/loadbalancer/test_db_loadbalancer.py

index eaec09ac26c6ec8f9852cabb366885a901e02e00..1be9f934fa0539398850bc478ce2b27c89e555ac 100644 (file)
@@ -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,
index 85fb9de05e7532c6a42bcdffd81106ac9b998527..d50c6e28b6b43d4558180d5e4623a2f41623a911 100644 (file)
@@ -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
index 3183c448a950f0c15fbd1e24537789c36ca8007e..01b65b6575d6bae0b01723f60d538daf10046f48 100644 (file)
@@ -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):
index 9457ac3c1d2fa61ab297d7695cd73fa0aaa997fe..11b9c4df39c25cbe8381cecd693a656c6d4674de 100644 (file)
@@ -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(
index 584569741546c05e4fb2959818d096c490aa03b7..61a03c13390e9a0f38532b6b39f170a8a8569ce2 100644 (file)
@@ -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: