Fix query error on dhcp release port for postgresql

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
This commit is contained in:
Armando Migliaccio 2013-10-31 07:55:30 -07:00 committed by armando-migliaccio
parent 97308f1b78
commit 3c3e6eef90

View File

@ -1404,11 +1404,16 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2,
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)