Fix port creation issue appeared with postgresql backend

IPAllocationPool has relation to IPAvailabilityRange which is setup to
load eagerly. Eager loading is implemented with left outer join which is
incompatible with with_lockmode('update') on postgresql.
The fix redefines eager loading with options(joinedload) making it use
inner join.

fixes bug 1215350

Change-Id: I148d37f2a1c2a340327d36c240eb8173aee9219a
This commit is contained in:
Eugene Nikanorov 2013-08-22 19:08:34 +04:00
parent 1c2e111a0b
commit e43c5c1ea6

View File

@ -312,9 +312,11 @@ class NeutronDbPluginV2(neutron_plugin_base_v2.NeutronPluginBaseV2,
subnet. subnet.
""" """
# Grab all allocation pools for the subnet # Grab all allocation pools for the subnet
pool_qry = context.session.query( allocation_pools = (context.session.query(
models_v2.IPAllocationPool).with_lockmode('update') models_v2.IPAllocationPool).filter_by(subnet_id=subnet_id).
allocation_pools = pool_qry.filter_by(subnet_id=subnet_id) options(orm.joinedload('available_ranges', innerjoin=True)).
with_lockmode('update'))
# Find the allocation pool for the IP to recycle # Find the allocation pool for the IP to recycle
pool_id = None pool_id = None
for allocation_pool in allocation_pools: for allocation_pool in allocation_pools: