Merge "Use a joined relationship for AZ info on routers"

This commit is contained in:
Jenkins
2015-12-18 19:05:24 +00:00
committed by Gerrit Code Review
4 changed files with 6 additions and 12 deletions

View File

@@ -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):

View File

@@ -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]

View File

@@ -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,

View File

@@ -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."""