]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commit
Ensure non-overlapping cidrs in subnetpools without galera
authorCedric Brandily <zzelle@gmail.com>
Mon, 4 May 2015 21:36:19 +0000 (23:36 +0200)
committerCedric Brandily <zzelle@gmail.com>
Mon, 25 May 2015 14:09:08 +0000 (16:09 +0200)
commit3682e3391f188845d0c7f382f0ccd4b38db3904e
tree65bfa93dca0ead25850a2fa6f25d2b8507ce9f38
parent3425be06bf069a256dbb0fdb9528459544e9947f
Ensure non-overlapping cidrs in subnetpools without galera

_get_allocated_cidrs[1] locks only allocated subnets in a subnetpool
(with mysql/postgresql at least). It ensures we don't allocate a cidr
overlapping with existent cidrs but nothing disallows a concurrent
subnet allocation to create a subnet in the same subnetpool.

This change replaces the lock on subnetpool subnets by a lock on the
subnetpool itself. It disallows to allocate concurrently 2 subnets in
the same subnetpool and ensure non-overlapping cidrs in the same
subnetpool.

Moreover this change solves a trouble with postgresql which disallows
to lock an empty select with an outer join: it happens on first subnet
allocation in a subnetpool when no specific cidr is provided. Moving
the lock ensures the lock is done on a non-empty select.

But this change does not ensure non-overlapping cidrs in subnetpools
with galera because galera doesn't support SELECT FOR UPDATE locks. A
follow-up change will (try to?) remove locks from subnet allocation[1]
in order to ensure non-overlapping cidrs in subnetpools also with galera.

[1] in neutron.ipam.subnet_alloc.SubnetAllocator

Closes-Bug: #1451558
Partial-Bug: #1451576
Change-Id: I73854f9863f44621ae0d89c5dc4893ccc16d07e4
neutron/ipam/subnet_alloc.py