Skip to content

Commit

Permalink
Fix query error on dhcp release port for postgresql
Browse files Browse the repository at this point in the history
This is achieved by disabling eager loading and
hence by avoiding incurring in left outer joins
that cannot be applied because of a nullable
side.

Closes-bug: #1246788

Change-Id: I16bcc738a43609f715c2561413c6387f443bd99c
  • Loading branch information
Armando Migliaccio committed Nov 1, 2013
1 parent 97308f1 commit 3c3e6ee
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions neutron/db/db_base_plugin_v2.py
Expand Up @@ -1404,11 +1404,16 @@ def delete_port(self, context, id):

def delete_ports(self, context, filters):
with context.session.begin(subtransactions=True):
ports = self._get_ports_query(
context, filters=filters).with_lockmode('update')
if ports:
for port in ports:
self.delete_port(context, port['id'])
# Disable eagerloads to avoid postgresql issues with outer joins
# and SELECT FOR UPDATE. This means that only filters for columns
# on the Port model will be effective, which is fine in nearly all
# the cases where filters are used
query = context.session.query(
models_v2.Port).enable_eagerloads(False)
ports = self._apply_filters_to_query(
query, models_v2.Port, filters).with_lockmode('update').all()
for port in ports:
self.delete_port(context, port['id'])

def _delete_port(self, context, id):
port = self._get_port(context, id)
Expand Down

0 comments on commit 3c3e6ee

Please sign in to comment.