From: Armando Migliaccio Date: Thu, 31 Oct 2013 14:55:30 +0000 (-0700) Subject: Fix query error on dhcp release port for postgresql X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=3c3e6eef90c87440c87803dba3325e7cc8c79a17;p=openstack-build%2Fneutron-build.git 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 --- diff --git a/neutron/db/db_base_plugin_v2.py b/neutron/db/db_base_plugin_v2.py index f7b0442f0..58490bca6 100644 --- a/neutron/db/db_base_plugin_v2.py +++ b/neutron/db/db_base_plugin_v2.py @@ -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)