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
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,
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
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):
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)
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(
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: