Merge "Use a joined relationship for AZ info on routers"
This commit is contained in:
@@ -29,7 +29,7 @@ class RouterAvailabilityZoneMixin(l3_attrs_db.ExtraAttributesMixin):
|
|||||||
router_res[az_ext.AZ_HINTS] = az_ext.convert_az_string_to_list(
|
router_res[az_ext.AZ_HINTS] = az_ext.convert_az_string_to_list(
|
||||||
router_res[az_ext.AZ_HINTS])
|
router_res[az_ext.AZ_HINTS])
|
||||||
router_res['availability_zones'] = (
|
router_res['availability_zones'] = (
|
||||||
self.get_router_availability_zones(router_db['id']))
|
self.get_router_availability_zones(router_db))
|
||||||
|
|
||||||
def _process_extra_attr_router_create(
|
def _process_extra_attr_router_create(
|
||||||
self, context, router_db, router_req):
|
self, context, router_db, router_req):
|
||||||
|
@@ -31,7 +31,6 @@ from neutron.common import utils as n_utils
|
|||||||
from neutron import context as n_ctx
|
from neutron import context as n_ctx
|
||||||
from neutron.db import agents_db
|
from neutron.db import agents_db
|
||||||
from neutron.db import agentschedulers_db
|
from neutron.db import agentschedulers_db
|
||||||
from neutron.db import api as db_api
|
|
||||||
from neutron.db import l3_attrs_db
|
from neutron.db import l3_attrs_db
|
||||||
from neutron.db import model_base
|
from neutron.db import model_base
|
||||||
from neutron.extensions import l3agentscheduler
|
from neutron.extensions import l3agentscheduler
|
||||||
@@ -563,12 +562,5 @@ class AZL3AgentSchedulerDbMixin(L3AgentSchedulerDbMixin,
|
|||||||
router_az.RouterAvailabilityZonePluginBase):
|
router_az.RouterAvailabilityZonePluginBase):
|
||||||
"""Mixin class to add availability_zone supported l3 agent scheduler."""
|
"""Mixin class to add availability_zone supported l3 agent scheduler."""
|
||||||
|
|
||||||
def get_router_availability_zones(self, router_id):
|
def get_router_availability_zones(self, router):
|
||||||
session = db_api.get_session()
|
return list({agent.availability_zone for agent in router.l3_agents})
|
||||||
with session.begin():
|
|
||||||
query = session.query(agents_db.Agent.availability_zone)
|
|
||||||
query = query.join(RouterL3AgentBinding)
|
|
||||||
query = query.filter(
|
|
||||||
RouterL3AgentBinding.router_id == router_id)
|
|
||||||
query = query.group_by(agents_db.Agent.availability_zone)
|
|
||||||
return [item[0] for item in query]
|
|
||||||
|
@@ -91,6 +91,8 @@ class Router(model_base.HasStandardAttributes, model_base.BASEV2,
|
|||||||
RouterPort,
|
RouterPort,
|
||||||
backref='router',
|
backref='router',
|
||||||
lazy='dynamic')
|
lazy='dynamic')
|
||||||
|
l3_agents = orm.relationship('Agent', lazy='joined', viewonly=True,
|
||||||
|
secondary='routerl3agentbindings')
|
||||||
|
|
||||||
|
|
||||||
class FloatingIP(model_base.HasStandardAttributes, model_base.BASEV2,
|
class FloatingIP(model_base.HasStandardAttributes, model_base.BASEV2,
|
||||||
|
@@ -64,5 +64,5 @@ class Router_availability_zone(extensions.ExtensionDescriptor):
|
|||||||
class RouterAvailabilityZonePluginBase(object):
|
class RouterAvailabilityZonePluginBase(object):
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def get_router_availability_zones(self, router_id):
|
def get_router_availability_zones(self, router):
|
||||||
"""Return availability zones which a router belongs to."""
|
"""Return availability zones which a router belongs to."""
|
||||||
|
Reference in New Issue
Block a user