]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Remove SELECT FOR UPDATE use in delete_firewall
authorCedric Brandily <zzelle@gmail.com>
Tue, 26 Aug 2014 18:23:04 +0000 (20:23 +0200)
committerCedric Brandily <zzelle@gmail.com>
Tue, 2 Sep 2014 12:34:23 +0000 (12:34 +0000)
SELECT FOR UPDATE expression, which is triggered with the use of the
SQLAlchemy Query object's with_lockmode('update') method, is
detrimental to performance and scalability of the database
performance code in Neutron due to the lock contention it produces.

SELECT FOR UPDATE can be entirely avoided in delete_firewall method
with the use of single-shot DELETE expressions.

Partial-Bug: #1364358
Change-Id: Ia8db73312f5dff6a5bd573694a60a798279834cb

neutron/db/firewall/firewall_db.py

index 3460ea01be86b75c71bf5059cf52a97ae23fa9ab..16dbd622089882c44a2e5be00356d260bb419a14 100644 (file)
@@ -264,12 +264,11 @@ class Firewall_db_mixin(firewall.FirewallPluginBase, base_db.CommonDbMixin):
     def delete_firewall(self, context, id):
         LOG.debug(_("delete_firewall() called"))
         with context.session.begin(subtransactions=True):
-            fw_query = context.session.query(
-                Firewall).with_lockmode('update')
-            firewall_db = fw_query.filter_by(id=id).one()
             # Note: Plugin should ensure that it's okay to delete if the
             # firewall is active
-            context.session.delete(firewall_db)
+            count = context.session.query(Firewall).filter_by(id=id).delete()
+            if not count:
+                raise firewall.FirewallNotFound(firewall_id=id)
 
     def get_firewall(self, context, id, fields=None):
         LOG.debug(_("get_firewall() called"))