Skip to content

Commit

Permalink
Remove SELECT FOR UPDATE use in delete_firewall
Browse files Browse the repository at this point in the history
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
  • Loading branch information
ZZelle committed Sep 2, 2014
1 parent 2f79320 commit 187217d
Showing 1 changed file with 3 additions and 4 deletions.
7 changes: 3 additions & 4 deletions neutron/db/firewall/firewall_db.py
Expand Up @@ -264,12 +264,11 @@ def update_firewall(self, context, id, firewall):
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"))
Expand Down

0 comments on commit 187217d

Please sign in to comment.