Implement "IPAllocation" router ports allocated retrieval
Implemented a method, in "IPAllocation" OVO class, to retrieve
the allocated router ports.
The new query used dispenses with one of the inner join queries
required in the former query, making it faster.
This method allows to filter by gateway IP address and can return the
whole query list or just the first register found.
Trivial-Fix
Change-Id: I1a5205303ebede533ffa6b3b85d4ec2f4b112426
(cherry picked from commit b7956d80ca
)
This commit is contained in:
parent
6b62c26432
commit
8c9c14b6b1
|
@ -629,15 +629,12 @@ class NeutronDbPluginV2(db_base_plugin_common.DbBasePluginCommon,
|
|||
# a subnet-update and a router-interface-add operation are
|
||||
# executed concurrently
|
||||
if cur_subnet and not ipv6_utils.is_ipv6_pd_enabled(s):
|
||||
gateway_ip = str(cur_subnet['gateway_ip'])
|
||||
with db_api.CONTEXT_READER.using(context):
|
||||
# TODO(electrocucaracha): Look a solution for Join in OVO
|
||||
ipal = models_v2.IPAllocation
|
||||
alloc_qry = context.session.query(ipal.port_id)
|
||||
alloc_qry = alloc_qry.join("port", "routerport")
|
||||
gateway_ip = str(cur_subnet['gateway_ip'])
|
||||
allocated = alloc_qry.filter(
|
||||
ipal.ip_address == gateway_ip,
|
||||
ipal.subnet_id == cur_subnet['id']).first()
|
||||
allocated = port_obj.IPAllocation.get_alloc_routerports(
|
||||
context, cur_subnet['id'], gateway_ip=gateway_ip,
|
||||
first=True)
|
||||
|
||||
if allocated and allocated.port_id:
|
||||
raise exc.GatewayIpInUse(
|
||||
ip_address=gateway_ip,
|
||||
|
|
|
@ -223,6 +223,21 @@ class IPAllocation(base.NeutronDbObject):
|
|||
alloc_obj = super(IPAllocation, cls)._load_object(context, alloc)
|
||||
alloc_obj.delete()
|
||||
|
||||
@classmethod
|
||||
def get_alloc_routerports(cls, context, subnet_id, gateway_ip=None,
|
||||
first=False):
|
||||
alloc_qry = context.session.query(cls.db_model.port_id)
|
||||
alloc_qry = alloc_qry.join(
|
||||
l3.RouterPort, l3.RouterPort.port_id == cls.db_model.port_id)
|
||||
alloc_qry = alloc_qry.filter(cls.db_model.subnet_id == subnet_id)
|
||||
if gateway_ip:
|
||||
alloc_qry = alloc_qry.filter(cls.db_model.ip_address == gateway_ip)
|
||||
|
||||
if first:
|
||||
return alloc_qry.first()
|
||||
else:
|
||||
return alloc_qry.all()
|
||||
|
||||
|
||||
@base.NeutronObjectRegistry.register
|
||||
class PortDNS(base.NeutronDbObject):
|
||||
|
|
Loading…
Reference in New Issue