Filter by device_owner instead of iterating by all subnet ports

Optimization in _generate_arp_table_and_notify_agent()

Change-Id: Id19af911d5ae4e62971abe7501c2c60ea2fc99a9
This commit is contained in:
Oleg Bondarev 2016-01-15 11:37:00 +03:00
parent 5535a71e75
commit d55845236d
2 changed files with 11 additions and 11 deletions

View File

@ -689,18 +689,18 @@ class L3_NAT_with_dvr_db_mixin(l3_db.L3_NAT_db_mixin,
"""Generates the arp table entry and notifies the l3 agent."""
ip_address = fixed_ip['ip_address']
subnet = fixed_ip['subnet_id']
filters = {'fixed_ips': {'subnet_id': [subnet]}}
filters = {'fixed_ips': {'subnet_id': [subnet]},
'device_owner': [l3_const.DEVICE_OWNER_DVR_INTERFACE]}
ports = self._core_plugin.get_ports(context, filters=filters)
for port in ports:
if port['device_owner'] == l3_const.DEVICE_OWNER_DVR_INTERFACE:
router_id = port['device_id']
router_dict = self._get_router(context, router_id)
if router_dict.extra_attributes.distributed:
arp_table = {'ip_address': ip_address,
'mac_address': mac_address,
'subnet_id': subnet}
notifier(context, router_id, arp_table)
return
router_id = port['device_id']
router_dict = self._get_router(context, router_id)
if router_dict.extra_attributes.distributed:
arp_table = {'ip_address': ip_address,
'mac_address': mac_address,
'subnet_id': subnet}
notifier(context, router_id, arp_table)
return
def update_arp_entry_for_dvr_service_port(
self, context, port_dict, action):

View File

@ -609,7 +609,7 @@ class L3DvrTestCase(test_db_base_plugin_v2.NeutronDbPluginV2TestCase):
'device_owner': l3_const.DEVICE_OWNER_DVR_INTERFACE,
'device_id': 'dvr_router_id'
}
plugin.get_ports.return_value = [port, dvr_port]
plugin.get_ports.return_value = [dvr_port]
grtr.return_value = dvr_router
dvr_router.extra_attributes.distributed = True
self.mixin.update_arp_entry_for_dvr_service_port(