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])
|
||||
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(
|
||||
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.db import agents_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 model_base
|
||||
from neutron.extensions import l3agentscheduler
|
||||
@@ -563,12 +562,5 @@ class AZL3AgentSchedulerDbMixin(L3AgentSchedulerDbMixin,
|
||||
router_az.RouterAvailabilityZonePluginBase):
|
||||
"""Mixin class to add availability_zone supported l3 agent scheduler."""
|
||||
|
||||
def get_router_availability_zones(self, router_id):
|
||||
session = db_api.get_session()
|
||||
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]
|
||||
def get_router_availability_zones(self, router):
|
||||
return list({agent.availability_zone for agent in router.l3_agents})
|
||||
|
@@ -91,6 +91,8 @@ class Router(model_base.HasStandardAttributes, model_base.BASEV2,
|
||||
RouterPort,
|
||||
backref='router',
|
||||
lazy='dynamic')
|
||||
l3_agents = orm.relationship('Agent', lazy='joined', viewonly=True,
|
||||
secondary='routerl3agentbindings')
|
||||
|
||||
|
||||
class FloatingIP(model_base.HasStandardAttributes, model_base.BASEV2,
|
||||
|
@@ -64,5 +64,5 @@ class Router_availability_zone(extensions.ExtensionDescriptor):
|
||||
class RouterAvailabilityZonePluginBase(object):
|
||||
|
||||
@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."""
|
||||
|
Reference in New Issue
Block a user