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
subnet.
"""
# Grab all allocation pools for the subnet
- pool_qry = context.session.query(
- models_v2.IPAllocationPool).with_lockmode('update')
- allocation_pools = pool_qry.filter_by(subnet_id=subnet_id)
+ allocation_pools = (context.session.query(
+ models_v2.IPAllocationPool).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
pool_id = None
for allocation_pool in allocation_pools: