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
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"))